Dada una lista no vacía de enteros decimales positivos, genera el número más grande del conjunto de números con la menor cantidad de dígitos.
La lista de entrada no estará en ningún orden en particular y puede contener valores repetidos.
Ejemplos:
[1] -> 1
[9] -> 9
[1729] -> 1729
[1, 1] -> 1
[34, 3] -> 3
[38, 39] -> 39
[409, 12, 13] -> 13
[11, 11, 11, 1] -> 1
[11, 11, 11, 11] -> 11
[78, 99, 620, 1] -> 1
[78, 99, 620, 10] -> 99
[78, 99, 620, 100] -> 99
[1, 5, 9, 12, 63, 102] -> 9
[3451, 29820, 2983, 1223, 1337] -> 3451
[738, 2383, 281, 938, 212, 1010] -> 938
El código más corto en bytes gana.
code-golf
number
arithmetic
Pasatiempos de Calvin
fuente
fuente
Respuestas:
Pyth,
736 bytesBanco de pruebas
Explicación:
Solución de 7 bytes:
Banco de pruebas
Explicación:
fuente
Python 2,
4842 bytes-6 bytes gracias a @Dennis (usar en
min
lugar desorted
)Todos los casos de prueba están en ideone
Tome el mínimo de la lista por (longitud, -valor)
fuente
min
debería funcionar en lugar desorted
.sorted()[0]
pormin
? Considero que es una modificación trivial de su código original.len(`x`)+1./x
para la misma longitud. Lástima que necesites el1.
.Jalea , 7 bytes
Pruébelo en TryItOnline
O vea todos los casos de prueba también en TryItOnline
¿Cómo?
fuente
05AB1E , 5 bytes
Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Ruby, 34 bytes
Véalo en eval.in: https://eval.in/643153
fuente
MATL , 14 bytes
Pruébalo en línea!
Explicación:
fuente
Retina ,
2416 bytesPruébalo en línea! o ejecutar todos los casos de prueba .
¡Guardado 8 bytes gracias a Martin!
La prueba completa está utilizando una versión un poco más antigua del código, pero el algoritmo es idéntico. Lo actualizaré para estar más cerca cuando tenga más tiempo.
La nueva línea final es significativa. Ordena los números por valor numérico inverso, luego los ordena por número de dígitos. Esto nos deja con el número más grande con la menor cantidad de dígitos en la primera posición, por lo que podemos eliminar los dígitos restantes.
fuente
G1`
para la última etapa.#
. Solo le importa el orden relativo para una longitud entera dada, y dentro de una longitud la clasificación lexicográfica de los números es correcta.\w+
por defecto para ordenar, de esa manera no tendría que luchar tanto para hacer las suites de prueba;)Mathematica,
3331 bytesMinimalBy selecciona todos los elementos de la lista de entrada original con la puntuación más pequeña según
IntegerLength
, es decir, con el número más pequeño de dígitos; y luego Max saca el más grande.Gracias a Martin Ender por encontrar y luego guardar 2 bytes para mí :)
fuente
Perl 6 , 18 bytes
Explicación:
Uso:
fuente
Jalea , 8 bytes
Pruébalo en línea! o Verificar todos los casos de prueba.
Explicación
fuente
JavaScript (ES6), 51
Prueba
fuente
J,
2114 bytes¡Ahorró 7 bytes gracias a las millas y (indirectamente) a Jonathan!
Esta es una cadena de cuatro:
Pasemos por la entrada
10 27 232 1000
. La horquilla interna consta de tres dientes.#@":"0
calcula los tamaños,,.
concatena cada tamaño con su-
miembro negado ( ). Para la entrada10 27 232 1000
, nos queda esto:Ahora, tenemos
{.@/:
como el diente externo. Esto es monádico primero ({.
) sobre dyadic sort (/:
). Es decir, tomaremos el primer elemento del resultado de dyadic/:
. Esto ordena su argumento derecho de acuerdo con su argumento izquierdo, que nos da para nuestra entrada:Luego, usar
{.
nos da el primer elemento de esa lista, y hemos terminado:Versión antigua
Todavía estoy trabajando en mejoras. Jugué golf desde 30, y creo que esto es lo suficientemente bueno. Primero lo dividiré en partes básicas:
Así es como funciona esto.
Este es un tren monádico, pero esta parte es un gancho. El verbo
>./@(#~ ] = <./@])
se llama con argumento izquierdo como entrada a la cadena principal y los tamaños, definidos como#@":"0
, como argumento derecho. Esto se calcula como longitud (#
) sobre (@
) formato predeterminado (":
), es decir, cadena de caracteres numérica, que se aplica para aplicar a las celdas 0 (es decir, miembros) de la entrada ("0
).Veamos la entrada de ejemplo
409 12 13
.Ahora para el verbo interior,
>./@(#~ ] = <./@])
. Parece>./@(...)
que significa efectivamente el valor máximo (>./
) de (@
) lo que hay dentro(...)
. En cuanto al interior, este es un tren de cuatro, equivalente a este tren de cinco:[
se refiere al argumento original y se]
refiere a la matriz de tamaño;409 12 13
y3 2 2
respectivamente en este ejemplo. El diente derecho<./@]
, calcula el tamaño mínimo,2
en este caso.] = <./@]
es una matriz booleana de valores igual al mínimo,0 1 1
en este caso. Finalmente,[ #~ ...
toma valores del argumento izquierdo de acuerdo con la máscara de argumento derecho. Esto significa que los elementos que corresponden0
se descartan y1
retienen. Entonces nos quedamos con12 13
. Finalmente, de acuerdo con lo anterior, se toma el máximo, dándonos el resultado correcto de13
, y hemos terminado.fuente
>./@#~[:(=<./)#@":"0
. Creo que podría haber un poco más para ahorrar{.@/:#@":"0,.-
pero la entrada tiene que formarse como una lista400 12 13
?JavaScript (ES6), 62 bytes
fuente
cc, 54 bytes
Explicación:
Ejecute el ejemplo: 'input.txt' contiene todos los casos de prueba en la declaración de la pregunta
Salida:
fuente
Java 7,
112104bytesEnfoque diferente para guardar varios bytes gracias a @ Barteks2x .
Sin golf y casos de prueba:
Pruébalo aquí
Salida:
fuente
bash, awk, ordenar 53 bytes
Leer la entrada de stdin, un valor por línea
bash y sort,
5857 bytesfuente
while
y((
.JavaScript ES6,
807770 bytesEspero ir en la dirección correcta ...
fuente
a.map(i=>i.length).sort((a,b)=>a-b)[0]
conMath.min(...a.map(i=>i.length))
?Math.max
:a=>(m=Math.max)(...a.filter(l=>l.length==-m(...a.map(i=>-i.length))))
Parece que solo guarda 1 byte.filter
se puede reemplazar con unmap
que devuelve0
valores que no pasan la prueba:a=>(m=Math.max)(...a.map(l=>l.length+m(...a.map(i=>-i.length))?0:l))
Brachylog , 16 bytes
Pruébalo en línea!
Explicación
fuente
Haskell, 39 bytes
fuente
34
a2
.Javascript (ES6),
575453 bytesPara el registro, mi versión anterior estaba más orientada a las matemáticas pero 1 byte más grande:
Casos de prueba
fuente
MATL , 11 bytes
La entrada es un vector de columna (que se usa
;
como separador), comoPruébalo en línea! O verificar todos los casos de prueba .
Explicación
Usemos la entrada
[78; 99; 620; 100]
como ejemplo.fuente
Perl,
3837 bytesIncluye +1 para
-a
Dar entrada en STDIN:
maxmin.pl
:Utiliza memoria lineal en el número más grande, así que no intente esto en números demasiado grandes. Una solución sin ese defecto es de 38 bytes:
Todos estos son muy incómodos y no se sienten óptimos en absoluto ...
fuente
R,
724136 bytesReescribió la función con un nuevo enfoque. Golfé 5 bytes gracias a una sugerencia de @bouncyball.
Explicado:
Sangrado / explicado:
fuente
function
:i=scan();n=nchar(i);max(i[n==min(n)])
n=nchar(i<-scan())
.Bash + coreutils, 58 bytes
El formato de entrada es un valor por línea. Sugerencias de golf son bienvenidas.
Explicación:
fuente
sed q
=head -1
Python 2 - 41 bytes
fuente
Python 2, 58 bytes
fuente
Python 3, 56 bytes
Utiliza una lambda en una lambda!
Python 2, 53 bytes
Lo mismo pero con backticks
fuente
Pip , 11 bytes
Toma entrada como argumentos de línea de comando. Pruébalo en línea!
Primera vez que utiliza el
S
ort-K
operador de ojos! Al igual que Pythonsorted()
, toma una función que se aplica a cada elemento del iterable y el resultado se usa como una clave de clasificación. Así es como funciona este programa:fuente
Clojure, 63 bytes
como en:
Aunque estoy seguro de que hay una manera de hacerlo más pequeño.
fuente
PHP, 86 bytes
fuente