Numero più grande e più piccolo possibile


16

Compito

Dato un array di numeri non negativi, genera il numero più grande e più piccolo possibile che può essere formato unendoli a loro.

Regole

Input, Output possono essere in qualsiasi formato conveniente.

L'array può avere al massimo 1 numero decimale.

Esempi

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

Questo è code-golf, quindi vince il codice più breve.


1
La prima uscita non sarebbe: 4422333355.55, 55.5544333322? Quelli sono sempre più piccoli.
ouflak,

@ouflak, devi produrre il più grande e il più piccolo.
Vedant Kandoi,

1
Non importa, vederlo ora. Si è confuso con il decimale.
ouflak,

Sarebbe [[55.55,22,33,33,44],[44,33,33,22,55.55]]un formato di output accettabile?
Shaggy,

1
In ogni caso va bene @Jordan
Vedant Kandoi il

Risposte:



3

05AB1E , 11 byte

œJΣ'.¡ï}Á2£

Provalo online! o come una suite di test

Spiegazione

 œ             # 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

Peccato che non abbiamo un cast to float. Ricordo che ce n'era uno nell'eredità, ma l'ho appena cercato e apparentemente era un stringified cast to float, il che è abbastanza inutile poiché vuoi galleggianti invece di stringhe su cui ordinare .. xD
Kevin Cruijssen

@KevinCruijssen: Sì. Abbiamo avuto un, is_numberma purtroppo no to_number.
Emigna,

3

JavaScript (ES6), 68 66 byte

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

Provalo online!

Come?

Utilizziamo il seguente test per confrontare due valori nella matrice di input:

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

x % 1 || xXXX

L'espressione [x % 1 || x] + ycostringe il risultato sopra a una stringa e lo concatena con l'altro valore.

Se nell'elenco è presente un numero decimale, deve essere sempre considerato come il valore più piccolo. Applicando la nostra conversione, un numero decimale viene trasformato in una stringa che inizia con "0.", che è lessicograficamente ordinato prima di ogni altra cosa.

Esempi:

  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 byte

á m¬ñn é v2

Provalo

1 byte salvato grazie a Luis , per favore anche la +1sua soluzione.

á               :Permutations
  m             :Map
   ¬            :  Join
    ñ           :Sort by
     n          :  Converting each to a number
       é        :Rotate right
         v2     :Remove & return the first 2 elements

Ok, va meglio !! Dannazione!! che è éstato nascosto per tutto questo tempo !!
Luis felipe De jesus Munoz,


3

Gelatina , 6 byte

Œ!VṢ.ị

Provalo online!

Spiegazione:

Œ!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)

Non ho mai programmato in Jelly, ma .ịè un modo piuttosto interessante di ottenere sia il primo che l'ultimo elemento di un elenco. Bella risposta! +1 da me.
Kevin Cruijssen,

1
@KevinCruijssen In realtà ottiene l'ultimo e il primo elemento. : P
Erik the Outgolfer,

Inoltre non ho mai programmato in Jelly, ma sono confuso su come .ịfunziona. Se sto leggendo correttamente i documenti, penso che ottenga l'elemento y in floor (x) e ceil (x), e lo .è 0.5. Ciò non significa che otterrà elementi di y all'indice 0 e 1?
Cowabunghole,

Jelly 1 è indicizzato? Ciò spiegherebbe questo comportamento, ma non vedo nulla al riguardo nei documenti.
Cowabunghole,

1
@Cowabunghole Sì, Jelly è 1 indicizzata.
Erik the Outgolfer,

3

Rubino , 56 45 byte

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

Provalo online!

-11 byte, grazie Giordania


1
Bel lavoro! Puoi salvare 2 byte rilasciando le parentesi attorno al tuo argomento ( ->a{...) e altri 9 usando il minmaxmetodo pratico : tio.run/…
Giordania

2

Pyth, 13 12 byte

hM_BSvsM.p`M

Output nella forma [smallest, largest]. Provalo online qui o verifica tutti i casi di test contemporaneamente qui .

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

Modifica: salvato un byte eliminando la stringa dalla funzione di mappatura. Versione precedente: hM_BSmvs`Md.p


2

Perl 6 , 41 byte

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

Provalo online!

alternative:

{.max,.min}o+<<*.permutations.map:{.join}
{.max,.min}o{[map +*.join,.permutations]}
{.max,.min}o{+<<map *.join,.permutations}

1

Buccia , 10 byte

§,▼▲morṁsP

Provalo online o verifica tutto!

Spiegazione

§,▼▲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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.