Największa i najmniejsza możliwa liczba

16

Zadanie

Biorąc pod uwagę tablicę liczb nieujemnych, wyprowadzaj największą i najmniejszą możliwą liczbę, którą można utworzyć, łącząc je.

Zasady

Wejście, wyjście może być w dowolnym dogodnym formacie.

Tablica może mieć najwyżej 1 liczbę dziesiętną.

Przykłady

input:[22,33,44,55.55,33]
output:4433332255.55,55.5522333344

input:[34,900,3,11,9]
output:990034311,113349009

input:[99.93,9,3,39]
output:939399.93,99.933399

input:[45.45,45,45,45]
output:45454545.45,45.45454545

input:[12,21,34,43,45.1]
output:4334211245.1,45.112213443

To jest golf golfowy, więc wygrywa najkrótszy kod.

Wedant Kandoi
źródło
1
Czy pierwsze wyjście nie byłoby: 4422333355.55, 55.5544333322? Te są odpowiednio mniejsze i większe.
ouflak
@ouflak, musisz wyprowadzać największy i najmniejszy.
Vedant Kandoi
1
Nieważne, zobacz to teraz. Mylę się z miejscem dziesiętnym.
ouflak
Czy [[55.55,22,33,33,44],[44,33,33,22,55.55]]byłby akceptowalny format wyjściowy?
Shaggy
1
Jakikolwiek sposób jest w porządku @ Jordan
Vedant Kandoi

Odpowiedzi:

4

Python 2 , 84 80 78 76 bajtów

lambda a:[''.join(sorted(a,key=lambda s:'.'in s or s+s)[::i])for i in[-1,1]]

Wypróbuj online!

-2 bajty, dzięki Arnauld

TFeld
źródło
3

05AB1E , 11 bajtów

œJΣ'.¡ï}Á2£

Wypróbuj online! lub jako pakiet testowy

Wyjaśnienie

 œ             # get permutations of input
  J            # join each
   Σ    }      # sort by
    '.¡        # splitting into [before decimal, after decimal]
       ï       # and converting each to int
         Á     # rotate the result right
          2£   # and take the first 2 values
Emigna
źródło
Szkoda, że ​​nie mamy cast to float. Pamiętam, że był w Legacy, ale po prostu go sprawdziłem i najwyraźniej był to stringified cast to float, co jest dość bezużyteczne, ponieważ chcesz, aby floaty zamiast ciągów sortowały się na .. xD
Kevin Cruijssen
@KevinCruijssen: Tak. My mieliśmyis_number ale niestety nie to_number.
Emigna
3

JavaScript (ES6), 68 66 bajtów

a=>[1,-1].map(n=>a.sort((a,b)=>[a%1||a]+b<[b%1||b]+a?n:-n).join``)

Wypróbuj online!

W jaki sposób?

Używamy następującego testu do porównania dwóch wartości w tablicy wejściowej:

[a % 1 || a] + b < [b % 1 || b] + a

x % 1 || xxxx

Wyrażenie [x % 1 || x] + ywymusza powyższy wynik na ciąg znaków i łączy go z drugą wartością.

Jeśli na liście znajduje się liczba dziesiętna, należy ją zawsze traktować jako najmniejszą wartość. Stosując naszą konwersję, liczba dziesiętna jest przekształcana na ciąg rozpoczynający się od "0.", który jest uporządkowany leksykograficznie przed wszystkim innym.

Przykłady:

  a |   b | [a%1||a]+b | [b%1||b]+a
----+-----+------------+------------
  4 |   5 | "45"       | "54"
 10 |  11 | "1011"     | "1110"
  8 |  80 | "880"      | "808"
  7 | 9.5 | "79.5"     | "0.57"
Arnauld
źródło
3

Japt, 14 11 bajtów

á m¬ñn é v2

Spróbuj

1 bajt zapisany dzięki Luisowi , proszę również +1jego rozwiązanie.

á               :Permutations
  m             :Map
   ¬            :  Join
    ñ           :Sort by
     n          :  Converting each to a number
       é        :Rotate right
         v2     :Remove & return the first 2 elements
Kudłaty
źródło
Ok, to jest lepsze !! cholera!! który ébył cały czas ukryty !!
Luis felipe De jesus Munoz
3

Japt , 14 11 10 bajtów

á m¬ñn gJò

Wypróbuj online!

Luis Felipe De Jesus Munoz
źródło
Niezłe. Miałem á ®¬nÃnpierwszą linię - kopiąc siebie, że nie myślałem o twojej drodze.
Shaggy
12 bajtów przy użyciu -hflagi.
Shaggy
11 bajtów przy użyciu -gflagi. Działa również z ízamiast ï.
Kudłaty
@Shaggy Excellent! Dzięki!!
Luis Felipe De Jesus Munoz
Dang! Wygląda na to, że wkrótce się poddałem; bardzo ładnie wykonane.
Shaggy
3

Galaretka , 6 bajtów

Œ!VṢ.ị

Wypróbuj online!

Wyjaśnienie:

Œ!VṢ.ị Arguments: x
Œ!     Permutations of x
  V    Concatenate the representations of each permutation's elements and evaluate the result as Jelly code
   Ṣ   Sort
    .ị Get element at index 0.5, i.e. elements at indices 0 (last) and 1 (first)
Erik the Outgolfer
źródło
Nigdy nie programuję w Jelly, ale .ịto całkiem fajny sposób na uzyskanie zarówno pierwszej, jak i ostatniej pozycji listy. Niezła odpowiedź! +1 ode mnie
Kevin Cruijssen
1
@KevinCruijssen W rzeczywistości dostaje ostatni i pierwszy element. : P
Erik the Outgolfer
Nigdy też nie programowałem w Jelly, ale nie jestem pewien, jak .ịdziała. Jeśli czytam dokumenty poprawnie, pomyślałem, że pobiera element y na floor (x) i ceil (x) i .jest 0.5. Czy to nie znaczy, że otrzyma elementy y o indeksie 0 i 1?
Cowabunghole
Czy indeksowany jest Jelly 1? To by wyjaśniało to zachowanie, ale nie widzę nic na ten temat w dokumentacji.
Cowabunghole
1
@Cowabunghole Tak, galaretka ma indeks 1.
Erik the Outgolfer
3

Rubin , 56 45 bajtów

->a{a.permutation.map{|p|p.join.to_f}.minmax}

Wypróbuj online!

-11 bajtów, dzięki Jordan

Travis
źródło
1
Dobra robota! Możesz zapisać 2 bajty, upuszczając nawiasy wokół argumentu ( ->a{...) i kolejne 9, używając wygodnej minmaxmetody: tio.run/…
Jordan
2

Pyth, 13 12 bajtów

hM_BSvsM.p`M

Dane wyjściowe w formie [smallest, largest]. Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .

hM_BSvsM.p`MQ   Implicit: Q=eval(input())
                Trailing Q inferred
          `MQ   Stringify all elements of Q
        .p      Generate all permutations of the above
      sM        Concatenate each permutation
     v          Evaluate each as a number
    S           Sort them
  _B            Pair the sorted list with its reverse
hM              Take the first element of each, implicit print

Edycja: Zapisano bajt, usuwając rygoryzację z funkcji mapowania. Poprzednia wersja: hM_BSmvs`Md.p

Sok
źródło
2

Perl 6 , 41 bajtów

{.max,.min}o+<<*.permutations.map(*.join)

Wypróbuj online!

Alternatywy:

{.max,.min}o+<<*.permutations.map:{.join}
{.max,.min}o{[map +*.join,.permutations]}
{.max,.min}o{+<<map *.join,.permutations}
nwellnhof
źródło
1

Łuska , 10 bajtów

§,▼▲morṁsP

Wypróbuj online lub zweryfikuj wszystko!

Wyjaśnienie

§,▼▲m(rṁs)P  -- example input: [2,3,1.1]
          P  -- permutations: [[2,3,1.1],[3,2,1.1],[1.1,3,2],[3,1.1,2],[1.1,2,3],[2,1.1,3]]
    m(   )   -- map the following
                (example with [1.1,2,3])
       ṁs    -- | show each and join: "1.123"
      r      -- | read: 1.123
             -- : [231.1,321.1,1.132,31.12,1.123,21.13]
§,           -- fork and join as tuple
  ▼          -- | min: 1.123
   ▲         -- | max: 321.1
             -- : (1.123,321.1)
ბიმო
źródło