Reto:
Dada una lista de enteros, ordene descendiendo por sus dígitos más grandes. El orden de los números con el mismo dígito más grande se ordena por el segundo dígito más grande, etc.
Ignoramos los dígitos duplicados en los números. Y si todos los dígitos de un número son iguales, el orden de esos números en la lista puede ser de la forma que desee.
Ejemplo:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
¿Por qué? Estos son los dígitos relevantes en los que se ordenaron los números:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Reglas de desafío:
- Ignoramos dígitos duplicados, así
478
y-7738
se ordenan como478, -7738
, debido a que las cifras son más grandes[8,7,4]
y[8,7,3]
, y no[8,7,4]
e[8,7,7,3]
. - Si varios números tienen los mismos dígitos, el orden de esos puede ser de cualquier manera. Entonces,
373
y-73
se puede ordenar como ambos373, -73
o-73, 373
(los dígitos son[7,3]
para ambos números). - Si un número no contiene más dígitos para verificar, se colocará en la parte posterior de los números relevantes. Entonces,
123
y3120
se ordenará como3120, 123
, porque los dígitos más grandes[3,2,1]
son los mismos, pero0
vienen antesnone
. - Puede suponer que todos los números en la entrada están en el rango
[-999999,999999]
. - Como resultado, solo una de las salidas posibles es suficiente, pero puede emitir todas las salidas posibles donde las sublistas pueden estar en cualquier permutación si lo desea (aunque dudo que ahorre bytes en cualquier idioma).
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolfing. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Las reglas estándar se aplican a su respuesta con las reglas de E / S predeterminadas , por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
m:g/\d./
por.abs.comb
: tio.run/…Python 2 ,
605554 bytes-1 byte gracias a Jonas Ausevicius .
Pruébalo en línea!
Sin golf
Pruébalo en línea!
fuente
None
se puede reemplazar concmp
ensort
funciónPython 2 ,
5860 byteslambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Pruébalo en línea!
fuente
Brachylog , 9 bytes
Nota: debido a cómo funciona el pedido en brachylog, no funciona en número correctamente. Esto se soluciona enviando el número a una cadena (
ṫ
) al costo de 1 byte.Pruébalo en línea!
fuente
ṫ
(a cadena) soluciona el problema. Ordenar dígitos en un número descendente funciona de la siguiente manera. Ordene de menor a mayor y luego invierta. El problema es que el número3120
ordenado de menor a mayor es el0123
que es igual al123
invertido321
y no3210
ṫ
). Como mencionó @Arnauld, pensé que tu comentario significaba que tu código actual no funciona. Podría ser mejor mencionarlo como: " Esto podría haber sido de 8 bytes al eliminarṫ
(toString), pero desafortunadamente no funciona según lo previsto debido a cómo funciona el pedido en Brachylog " .Pyth,
76 bytes-1 byte por @Sok
Pyth, que usa solo ASCII imprimible, tiene algunas desventajas aquí. Esta codificación óptima sería
6*log(95)/log(256) = 4.927
bytes, superando a 05AB1E.Explicado:
Probarlo aquí .
fuente
N
se puede omitir para guardar 1 byte: todas las funciones de tipo lambda infieren la presencia de la variable lambda principal si faltan argumentos al final. Los ejemplos incluyenm
inferird
,f
inferirT
,u
inferirG
...Jalea , 8 bytes
Pruébalo en línea!
Cómo funciona
fuente
Ṛ
en lugar de las pone boca abajo,U
. Sin embargo, tenga en cuenta que no necesita laD
ordenación desdeṢ
, se implementa con unaiterable(z, make_digits=True)
llamada dentro. Así que fueAṢQṚµÞṚ
por 7.MathGolf ,
76 bytesPruébalo en línea! o como un conjunto de pruebas .
Explicación
Después de mirar la solución 05AB1E de Emigna, descubrí que no necesitaba el operador absoluto (y mi respuesta anterior era realmente incorrecta debido a ese operador). Ahora la diferencia principal es que convierto a cadena y obtengo caracteres únicos en lugar de usar el operador de 1 byte en 05AB1E.
fuente
Japt , 12 bytes
Todos los casos de prueba
Explicación:
fuente
Haskell ,
5452 bytesPruébalo en línea!
fuente
r=reverse
guarda dos bytes. También permitimos funciones anónimas, por lo quef=
no es necesario contarlas.f=r$r id.nub.show;r=(reverse.).sortOn
.Stax ,
67 bytesEjecutar y depurarlo
fuente
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
lugar del deseado8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
o8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. Este caso de prueba también se usa en el ejemplo, y para explicar las reglas, así que lo examinaría para entenderlo mejor. Parece que solo estás ordenando por el dígito más grande una vez, sin ninguna de las otras reglas.APL (Dyalog Extended) , 19 bytes
Pruébalo en línea!
Corregido a un costo de +2 bytes gracias a OP.
fuente
¯7738
se coloca antes478
, pero debe ser después: los dígitos[8,7,4]
van antes que los dígitos[8,7,3]
.C (gcc) ,
114111109 bytesPruébalo en línea!
Explicación:
f () usa qsort () para ordenar la matriz proporcionada en su lugar. Usando la función de comparación c () para comparar números que evalúa los números usando v (). v () calcula un número más alto si hay dígitos más grandes en el parámetro.
[Editar 1] Mejorado en 3 bytes. Créditos de 2 bytes a Kevin. Gracias
[Editar 2] 2 bytes más mejorados. Créditos a gastropner. Gracias
fuente
n>0
al golfn
, creo, en tu ciclo de tu métodov
.int*a,n
se puede acortar aint*a
.for(a=0;n=abs(n);
lugar den=n<0?-n:n;for(a=0;n;
J , 17 bytes
Pruébalo en línea!
Explicación:
fuente
JavaScript (SpiderMonkey) , 68 bytes
Gracias por @Arnauld por recordarme nuevamente que SpiderMonkey usa una ordenación estable, por lo que -4 bytes para eliminar
||-1
.Pruébalo en línea!
JavaScript (Node.js) , 72 bytes
Pruébalo en línea!
fuente
Java (JDK) , 98 bytes
Pruébalo en línea!
Explicación
Nota:
Necesitaba una forma de asignar números a cualquiera
0/1
o0/-1
.indexOf
tiene la buena propiedad de que constantemente devuelve-1
caracteres que no se encuentran.-1
desplazado a la derecha por cualquier número es siempre-1
. Cualquier número positivo desplazado a la derecha por un número suficientemente grande siempre producirá0
.Aqui estamos:
fuente
>>9
lugar de>>32
debido al rango limitado de los números.Ruby , 55 bytes
Pruébalo en línea!
fuente
Perl 5
-nl
, 68 bytesPruébalo en línea!
fuente
Julia 1.0 , 50 bytes
Pruébalo en línea!
fuente
APL (NARS), 366 caracteres, 732 bytes
Para el operador qsort, es una traducción en APL de algo página 139 K&R Linguaggio C. Creo que en él se usan datos como C con punteros ... Prueba
fuente
Powershell, 44 bytes
Script de prueba:
Salida:
fuente
PHP,
87 8684 bytesEjecutar
-nr
o probarlo en línea .Reemplace
++$i
con$argc
(+1 byte) para suprimir el Aviso (y hacer-n
obosolete).Descompostura
-
es "más pequeño" que los dígitos, por lo que no tiene ningún efecto en la clasificación.fuente
Lisp común, 88 bytes
Pruébalo en línea!
Buena vieja verbosa Common Lisp!
Explicación:
fuente
C # (compilador interactivo de Visual C #) ,
7574 bytes-1 gracias @ solo ASCII
Pruébalo en línea!
En C #, las cadenas se consideran "enumerables" de caracteres. Utilizo esto para mi ventaja al convertir primero cada número en una cadena. LINQ se aprovecha para obtener los caracteres únicos (dígitos) ordenados en orden inverso. Convierto cada conjunto de caracteres ordenados nuevamente en una cadena y lo uso como la clave de clasificación para ordenar la lista completa.
fuente
-
, ¿parece que el orden de esos realmente no importa?-
, devuelve el caso de prueba # 2... 321 2132 ...
que parece incorrecto?