Le plus grand et le plus petit nombre possible

16

Tâche

Étant donné un tableau de nombres non négatifs, sortez le plus grand et le plus petit nombre possible qui peut être formé en les joignant.

Règles

L'entrée, la sortie peuvent être dans n'importe quel format pratique.

Le tableau peut avoir au plus 1 nombre décimal.

Exemples

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

C'est le code-golf donc le code le plus court gagne.

Vedant Kandoi
la source
1
La première sortie ne serait-elle pas: 4422333355.55, 55.5544333322? Celles-ci sont respectivement plus petites et plus grandes.
ouflak
@ouflak, vous devez sortir le plus grand et le plus petit.
Vedant Kandoi du
1
Peu importe, voyez-le maintenant. Vous avez confondu avec la décimale.
ouflak
Serait [[55.55,22,33,33,44],[44,33,33,22,55.55]]un format de sortie acceptable?
Shaggy
1
Tout va bien @Jordan
Vedant Kandoi

Réponses:

3

05AB1E , 11 octets

œJΣ'.¡ï}Á2£

Essayez-le en ligne! ou comme suite de tests

Explication

 œ             # 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
la source
Dommage que nous n'en ayons pas cast to float. Je me souviens qu'il y en avait un dans l'héritage, mais je l'ai juste recherché et apparemment c'était un stringified cast to float, ce qui est assez inutile car vous voulez que les flotteurs au lieu des cordes
soient triés
@KevinCruijssen: Ouais. Nous en avons eu un is_numbermais malheureusement non to_number.
Emigna
3

JavaScript (ES6), 68 66 octets

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

Essayez-le en ligne!

Comment?

Nous utilisons le test suivant pour comparer deux valeurs dans le tableau d'entrée:

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

x % 1 || xXXX

L'expression [x % 1 || x] + ycontraint le résultat ci-dessus à une chaîne et le concatène avec l'autre valeur.

S'il y a un nombre décimal dans la liste, il doit toujours être considéré comme la plus petite valeur. En appliquant notre conversion, un nombre décimal est transformé en une chaîne commençant par "0.", qui est lexicographiquement ordonnée avant toute autre chose.

Exemples:

  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
la source
3

Japt, 14 11 octets

á m¬ñn é v2

Essayez-le

1 octet économisé grâce à Luis , s'il vous plaît +1sa solution aussi.

á               :Permutations
  m             :Map
   ¬            :  Join
    ñ           :Sort by
     n          :  Converting each to a number
       é        :Rotate right
         v2     :Remove & return the first 2 elements
Hirsute
la source
Ok, c'est mieux !! Zut!! qui éétait caché tout ce temps !!
Luis felipe De jesus Munoz
3

Japt , 14 11 10 octets

á m¬ñn gJò

Essayez-le en ligne!

Luis felipe De jesus Munoz
la source
Joli. J'avais á ®¬nÃnpour la première ligne - me donner un coup de pied que je ne pensais pas à votre façon.
Shaggy
12 octets , en utilisant l' -hindicateur.
Shaggy
11 octets , en utilisant l' -gindicateur. Fonctionne également avec íau lieu de ï.
Shaggy
@Shaggy Excellent! Merci!!
Luis felipe De jesus Munoz
Dang! On dirait que j'ai abandonné bientôt; très bien fait.
Shaggy
3

Gelée , 6 octets

Œ!VṢ.ị

Essayez-le en ligne!

Explication:

Œ!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 le Outgolfer
la source
Je ne programme jamais en Jelly, mais .ịc'est un moyen plutôt cool d'obtenir à la fois le premier et le dernier élément d'une liste. Bonne réponse! +1 de moi.
Kevin Cruijssen
1
@KevinCruijssen Il obtient en fait le dernier et le premier élément. : P
Erik the Outgolfer
Je n'ai jamais programmé de Jelly, mais je ne sais pas comment ça .ịfonctionne. Si je lis les documents correctement, je pense que obtient l'élément de y au sol (x) et au plafond (x), et .est 0.5. Cela ne signifie-t-il pas qu'il obtiendra des éléments de y à l'index 0 et 1?
Cowabunghole
Est-ce que Jelly 1 est indexé? Cela expliquerait ce comportement, mais je ne vois rien à ce sujet dans les documents.
Cowabunghole
1
@Cowabunghole Oui, Jelly est indexée sur 1.
Erik the Outgolfer
3

Rubis , 56 45 octets

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

Essayez-le en ligne!

-11 octets, merci Jordan

Travis
la source
1
Bon travail! Vous pouvez enregistrer 2 octets en supprimant les parenthèses autour de votre argument ( ->a{...) et un autre 9 en utilisant la minmaxméthode pratique : tio.run/…
Jordan
2

Pyth, 13 12 octets

hM_BSvsM.p`M

Sorties sous forme [smallest, largest]. Essayez-le en ligne ici ou vérifiez tous les cas de test en même temps ici .

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

Modifier: a enregistré un octet en supprimant la stringification de la fonction de mappage. La version précédente: hM_BSmvs`Md.p

Sok
la source
2

Perl 6 , 41 octets

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

Essayez-le en ligne!

Alternatives:

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

Décortiquer , 10 octets

§,▼▲morṁsP

Essayez-le en ligne ou vérifiez tout!

Explication

§,▼▲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)
ბიმო
la source