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.


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:



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

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"

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

Ok, to jest lepsze !! cholera!! który ébył cały czas ukryty !!
Luis felipe De jesus Munoz


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)

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


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


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}

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.