Número más grande y más pequeño posible

16

Tarea

Dada una serie de números no negativos, genera el número más grande y más pequeño posible que se puede formar uniéndolos.

Reglas

Entrada, Salida puede estar en cualquier formato conveniente.

La matriz puede tener como máximo 1 número decimal.

Ejemplos

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

Este es el código de golf, por lo que gana el código más corto.

Vedant Kandoi
fuente
1
¿No sería la primera salida: 4422333355.55, 55.5544333322? Esos son más pequeños y más grandes respectivamente.
ouflak
@ouflak, debe generar el más grande y el más pequeño.
Vedant Kandoi
1
No importa, míralo ahora. Se confundió con el lugar decimal.
ouflak
¿ [[55.55,22,33,33,44],[44,33,33,22,55.55]]Sería un formato de salida aceptable?
Shaggy
1
Cualquier manera está bien @ Jordania
Vedant Kandoi

Respuestas:

4

Python 2 , 84 80 78 76 bytes

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

Pruébalo en línea!

-2 bytes, gracias a Arnauld

TFeld
fuente
3

05AB1E , 11 bytes

œJΣ'.¡ï}Á2£

Pruébalo en línea! o como un conjunto de pruebas

Explicación

 œ             # 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
fuente
Lástima que no tengamos un cast to float. Recuerdo que había uno en el Legacy, pero lo busqué y aparentemente era un stringified cast to float, lo cual es bastante inútil ya que quieres flotadores en lugar de cuerdas para ordenar ... xD
Kevin Cruijssen
@KevinCruijssen: Sí. Nosotros tuvimos una is_number, pero por desgracia no to_number.
Emigna
3

JavaScript (ES6), 68 66 bytes

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

Pruébalo en línea!

¿Cómo?

Utilizamos la siguiente prueba para comparar dos valores en la matriz de entrada:

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

x % 1 || xxxX

La expresión [x % 1 || x] + yobliga al resultado anterior a una cadena y lo concatena con el otro valor.

Si hay un número decimal en la lista, siempre debe considerarse como el valor más pequeño. Al aplicar nuestra conversión, un número decimal se convierte en una cadena que comienza "0.", que se ordena lexicográficamente antes que nada.

Ejemplos:

  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
fuente
3

Japt, 14 11 bytes

á m¬ñn é v2

Intentalo

1 byte guardado gracias a Luis , por favor +1su solución también.

á               :Permutations
  m             :Map
   ¬            :  Join
    ñ           :Sort by
     n          :  Converting each to a number
       é        :Rotate right
         v2     :Remove & return the first 2 elements
Lanudo
fuente
Ok, esto es mejor !! ¡¡Maldición!! eso éestuvo escondido todo este tiempo !!
Luis felipe De jesus Munoz
3

Japt , 14 11 10 bytes

á m¬ñn gJò

Pruébalo en línea!

Luis felipe De jesus Munoz
fuente
Buena esa. Tenía á ®¬nÃnpara la primera línea, patearme a mí mismo que no pensé en tu camino.
Shaggy
12 bytes , utilizando la -hbandera.
Shaggy
11 bytes , usando la -gbandera. También funciona con en ílugar de ï.
Shaggy
@Shaggy Excelente! ¡¡Gracias!!
Luis felipe De jesus Munoz
Dang! Parece que me di por vencido hasta pronto; muy bien hecho.
Shaggy
3

Jalea , 6 bytes

Œ!VṢ.ị

Pruébalo en línea!

Explicación:

Œ!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 el Outgolfer
fuente
Nunca programo en Jelly, pero .ịes una forma genial de obtener el primer y el último elemento de una lista. ¡Buena respuesta! +1 de mi parte
Kevin Cruijssen
1
@KevinCruijssen Realmente obtiene el último y primer elemento. : P
Erik the Outgolfer
Tampoco he programado nunca en Jelly, pero estoy confundido sobre cómo .ịfunciona. Si estoy leyendo los documentos correctamente, creo que obtiene el elemento y en floor (x) y ceil (x), y .is 0.5. ¿No significa eso que obtendrá elementos de y en los índices 0 y 1?
Cowabunghole
¿Está indexado Jelly 1? Eso explicaría este comportamiento, pero no veo nada al respecto en los documentos.
Cowabunghole
1
@Cowabunghole Sí, Jelly tiene 1 índice.
Erik the Outgolfer
3

Ruby , 56 45 bytes

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

Pruébalo en línea!

-11 bytes, gracias Jordan

Travis
fuente
1
¡Buen trabajo! Puede guardar 2 bytes colocando los paréntesis alrededor de su argumento ( ->a{...) y otros 9 utilizando el minmaxmétodo práctico : tio.run/…
Jordan
2

Pyth, 13 12 bytes

hM_BSvsM.p`M

Salidas en forma [smallest, largest]. Pruébelo en línea aquí , o verifique todos los casos de prueba a la vez aquí .

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

Editar: guardado un byte al eliminar la cadena de la función de mapeo. Versión previa: hM_BSmvs`Md.p

Sok
fuente
2

Perl 6 , 41 bytes

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

Pruébalo en línea!

Alternativas:

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

Casco , 10 bytes

§,▼▲morṁsP

¡Pruébelo en línea o verifique todo!

Explicación

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