Dado un número entero positivo, podemos formar un nuevo número que se describe por sus dígitos tomados por pares (con un 0 inicial agregado para números con un número impar de dígitos).
Por ej .:
1234 se puede leer como un 2, tres 4s, por lo que la salida para 1234 es 2444.
643 tiene un número impar de dígitos, por lo que se agrega un cero inicial para que sea par. Entonces, 0643 se puede leer como: cero 6s, cuatro 3s, por lo tanto, la salida sería 3333.
(Esto es OEIS A056967 ).
Tarea: Dada una matriz de enteros positivos, ordénelos por su valor descrito por par de dígitos, en orden ascendente. El orden no importa entre los números de entrada que conducen al mismo valor.
Entrada : una matriz / lista / conjunto de enteros positivos. Los ceros iniciales en la entrada no están permitidos, y la entrada como cadenas / listas de dígitos / etc. no están permitidos: las entradas deben estar tan cerca de un tipo entero / numérico como sea capaz de usar su idioma.
Salida : la matriz ordenada de la manera mencionada anteriormente, devuelta en cualquiera de las formas habituales (valor de retorno de función / STDOUT / gritando al vacío / etc.) Puede imprimirlos individualmente, devolverlos como números, cadenas o listas de dígitos
Casos de prueba
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(En el cuarto caso de prueba, 1, 4 y 5 se evalúan a 0, por lo que se pueden clasificar entre sí en cualquier orden. De manera similar en el quinto caso de prueba, 10 y 1 se evalúan a 0, por lo que se pueden ordenar en cualquier orden)
(Relacionado: di lo que ves , uno 1, dos 1, uno 2 uno 1
Gracias a Kevin Cruijssen por ayudarnos a aclarar la pregunta en el Sandbox.
strtoi
devuelve un entero, ¿correcto? Si es así, está bien, es legal como es.Respuestas:
APL (Dyalog) , 26 bytes
Gracias por guardar 1 byte :)
Pruébalo en línea!
Toma inspiración de dzaima & ngn
fuente
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
funciona para 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 bytes
Pruébalo en línea!
Respuesta bastante laboriosa, pero funciona en todos los casos de prueba. Construye la salida de par de dígitos y ordena la entrada de acuerdo con esto.
fuente
v
de la variable de tus otras respuestas - Nuncav
antes lo había usado . Y buen uso deintToUtf8
!R , 120 bytes
Pruébalo en línea!
Código sin golf con explicación:
fuente
[!1:0]
truco es realmente agradable, nunca lo había visto antes.[!1:0]
muchachos estaban escondiendo algo ordenado. Estaba jugando con esto y los consejos sobre el golf R, tratando de obtener el número de los dígitos aritméticamente (sinas.double
), pero solo se me ocurrió una versión de 132 bytes: TIOPyth , 14 bytes
Pruébalo aquí! El | ¡Banco de pruebas! El | 12 bytes con lista de dígitos de E / S
¿Cómo funciona?
fuente
Jalea , 10 bytes
Pruébalo en línea!
¡Mira un paquete de prueba!
Cómo funciona
fuente
2537
y3725
no representan el mismo número.[2537, 3725]
. Nunca dudé de que esto sea una coincidencia, por lo tanto, incluí esa nota en la respuestaPerl 6 , 53 bytes
Pruébalo en línea!
Anónimo Cualquier lambda que toma una lista de valores y la ordena según lo que describen los pares de números.
En este caso, estoy invirtiendo el número, luego
rotor
agrego la lista por dos para obtener cada par de números. Esto excluirá el primer dígito para números de longitud impar, pero como eso se traduce en0
veces ese número, está bien. Además, alinea los valores para usar[x]
correctamente.fuente
Python 2 ,
8074 bytesPruébalo en línea!
fuente
Haskell ,
8988 bytesGuardado un byte gracias a los ovs
La última línea define una función anónima que se puede usar así:
La funcionalidad principal es proporcionada por el operador infijo
(?)
que realiza un seguimiento de un multiplicadorm
y la entrada RLE restanten
.(?)
resta continuamente 10 den
mientras haya un dígito para restar, y al hacerlo empuja otra copia del último dígito al frente de la salida (a través del multiplicadorm
, que se incrementa en 10 cada vez). Cuando se agota el lugar de las decenas, se descartan los dos últimos dígitos y el proceso se repite hasta que el número se reduce a 0. Finalmente, usamos el operador (con un multiplicador inicial de 1) como una clave de clasificación.fuente
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
Es un byte más corto.Casco , 10 bytes
Pruébalo en línea!
Explicación
fuente
Dyalog APL,
41393635313029 bytesPruébalo en línea!
-2 gracias a Cows quack
-4 (más -4 por la idea de conversión de base) gracias a ngn
-2 gracias, así que H.PWiz
fuente
⊃,/
puede convertirse∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
as⊂⌷¨⍨∘⍋F
C (gcc) (sistemas de 32 bits),
188177176 bytesPruébalo en línea!
en
amd64
agregar bandera-m32
para compilar.Uso :
s(x,n);
dondex
apunta a una matriz de enteros para ordenar yn
es la longitud de esa matriz.El segundo caso de prueba da un resultado incorrecto porque la conversión
25257
da lo2222277777
que desborda un entero de 32 bits; se agregó un quinto caso de prueba sin ese número.Explicación:
fuente
d()
es larga debido a las cadenas y funciones relacionadas con ellas, puede guardar muchos bytes simplemente leyendo los últimos 2 dígitos y creando la salida de esta manera:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
también ahorrará bytes evitando declarar e inicializarchar
s.b-~sprintf(b+1,"%d",x)%2
lugar deb+!(sprintf(b+1,"%d",x)&1)
x/10%10
lugar dex%100/10
Python 2 ,
10210197101 bytesPruébalo en línea!
fuente
Brachylog , 18 bytes
Pruébalo en línea!
Explicación
Se necesitaban muchas cosas pequeñas para explicar los tres casos diferentes: número impar de dígitos, par de 0 veces un número y pares normales.
fuente
|Ȯt
es necesario y, de hecho, lo hace incorrecto: es equivalente a rellenar con un 1 en lugar de un 0, por lo que dado [125, 26, 1], lo ordena como [1, 26, 125] en lugar de [1 125, 26].Perl 5 , 76 bytes
Una función en lugar de una línea por una vez.
Muy sencillo:
g
ordena las entradas numéricamente, utilizandoh
para convertir los números.h
hace esto usando la expresión regulars/(.)(.)/$2x$1/gre
(que probablemente es lo suficientemente legible). Y el0
relleno izquierdo se hace con0 x("@_"=~y///c%2)."@_"
(dondey///c
hay una forma abreviada de escrituralength
,x
es el operador de repetición y.
la concatenación).Pruébalo en línea!
¡Sin embargo, espero ver algunas respuestas más cortas de Perl!
fuente
Retina , 44 bytes
Pruébalo en línea!Generar la clave de clasificación al comienzo de la línea es más difícil, pero la etapa de clasificación corta da como resultado un ahorro general de 3 bytes. Explicación:
Aplique las dos primeras etapas en cada línea individualmente.
Une y copia un número par de dígitos finales.
Reemplace cada par de dígitos con su valor descrito. los
\G\d
hace que el partido se detenga en el espacio.Ordenar numéricamente.
Eliminar las claves de clasificación.
fuente
05AB1E ,
2019 bytesCorrección de errores para +1 byte, y luego golfizado por -2 bytes gracias a @sundar .
Pruébelo en línea o verifique todos los casos de prueba .
Definitivamente se puede jugar al golf ... No estoy muy feliz por eso tbh ...
Explicación:
fuente
Adjunto , 50 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (ES8),
7270 bytesPruébalo en línea!
fuente
Japt, 13 bytes
Pruébalo o ejecuta todos los casos de prueba
Explicación
fuente
Jalea , 14 bytes
Pruébalo en línea!
fuente
Ruby , 71 bytes
Pruébalo en línea!
fuente
Java 11,
204189 bytesToma una lista de Longs como parámetro y clasifica esta lista de entrada (sin devolver una nueva lista).
Pruébelo en línea (NOTA:
String.repeat(int)
se emularepeat(String,int)
porque Java 11 todavía no está en TIO. El recuento de bytes sigue siendo el mismo).Explicación:
fuente
+""
para convertir el número a String. Debería arreglarse ahora. :)