Dada una lista de dos o más números de serie detallados de igual longitud mayor que dos, por ej.
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
ordenar la lista por los números que representan las palabras:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Puede requerir que los números se deletreen en mayúsculas o minúsculas, pero no en mayúsculas.
Casos de prueba
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
da[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
da[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
da[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
da[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Respuestas:
Casco ,
98 bytesPruébalo en línea!
Algoritmo "inspirado" por la respuesta recursiva de Stax (acabo de cambiar un poco la cadena de búsqueda), ¡vota!
El truco consiste en asignar cada letra a su posición en la cadena
tfsen
(comprimida al final de este programa). Las listas de cáscaras están basadas en 1, y los elementos faltantes devuelven 0, por lo que obtenemos esta asignación:Como puede ver, las listas están perfectamente ordenadas.
Para que quede claro, así es como funciona la comparación de listas en Husk (y en muchos otros idiomas):
fuente
tfrsen
pero supongo que tienen palabras comowith
ysen
allí ayuda a la compresión.[1,0,0]
se considera más pequeño que[1,0,0,0]
(pero para este programa no haría la diferencia)Stax ,
2422171614 bytesEjecutar y depurarlo
Este programa toma matrices de dígitos deletreados en minúsculas para la entrada. La salida está separada por nueva línea de esta manera.
Este programa clasifica las entradas utilizando el orden obtenido bajo una transformación específica. Cada carácter en cada palabra se reemplaza por su índice en la cadena
"wo thif sen"
. Las matrices originales se ordenan por este orden. Luego, los resultados se imprimen después de unirlos con un espacio.Los espacios no sirven para nada, pero en realidad permiten una mayor compresión en la cadena literal.
fuente
Jalea , 12 bytes
Un enlace monádico.
Pruébalo en línea! ... o ver el pruebas
¿Cómo?
Convirtiendo los dígitos a ordinales y luego desde la base 10, luego tomando módulos por 4752 y luego 147, da un orden ascendente:
Esto se puede usar como una función clave para clasificar:
fuente
Python , 62 bytes
Pruébalo en línea! ... o ver el conjunto de pruebas
Nota:
que funciona en Python 2 (pero no 3) es más largo por dos bytes.
fuente
APL (Dyalog Classic) , 12 bytes
Pruébalo en línea!
Así es como encontré un argumento izquierdo adecuado para dyadic
⍒
(probé⍋
y longitud 6 primero):fuente
Perl 6 , 37 bytes
Intentalo
Expandido:
El bloque de código tomará un valor del formulario
("three","one","four")
y lo traducirá a("3","1","4")
un valor que.sort
puede usar fácilmente.fuente
APL (Dyalog) , 38 bytes
Pruébalo en línea!
Basado en la increíble solución de Jonathan Allan .
fuente
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
pero puede hacerlo mucho más simple en menos de la mitad de su conteo de bytes actual.Ruby, 48 bytes
Abusa del hecho de que
"zero".to_i(35)
es 0 (ya que 'z' no es un dígito válido en la base 35), por lo que es mucho más fácil forzar una fórmula para los otros nueve dígitos.fuente
K (ngn / k) , 14 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 70 bytes
Pruébalo en línea!
fuente
Ruby , 47 bytes
Pruébalo en línea!
Utiliza el hecho de que el uso de una base menor que el dígito máximo produce un resultado de cero (como señaló el histocrat en su respuesta )
fuente
Python 2 ,
858180 bytesSimplemente usa las dos primeras letras de cada palabra para determinar el número, luego ordena cada lista usando esa función de indexación como clave.
Pruébalo en línea!
Guardado 4 bytes, gracias a Jonathan Allan
fuente
Ruby , 49 bytes
Pruébalo en línea!
fuente
05AB1E , 27 bytes
Pruébalo en línea!
fuente
Haskell ,
133122109107106 bytesSin golf:
fuente
Python 2 , 59 bytes
Pruébalo en línea!
Refiriéndose a la solución Python 3 de Jonathan Allan ...
fuente
Java (JDK 10) , 132 bytes
Pruébalo en línea!
fuente
Ruby , 64 bytes
Pruébalo en línea!
Una lambda que acepta una matriz 2D de cadenas y devuelve una matriz 2D de cadenas.
Aprovechando la respuesta de Python 2 de mbomb007 para -26 bytes de lo que estaba a punto de publicar.
fuente
Perl 5 , 103 bytes
Pruébalo en línea!
fuente
Retina 0.8.2 , 38 bytes
Pruébalo en línea! El enlace incluye un conjunto de pruebas. Funciona reemplazando temporalmente las letras
zowithfsen
con su posición en esa cadena, lo que permite que los números se ordenen léxicamente.fuente
Jalea ,
302827 bytesPruébalo en línea!
-1 gracias a Jonathan Allan.
Encuentra el índice de cada dígito en la cadena 'onetwo ... nueve' y luego ordena usar esto como una función clave con
Þ
. No es necesario incluir'zero'
al principio porque la búsqueda de los dos primeros caracteres de'zero'
fallará y0
se devolverá en lugar de un índice, lo que'zero'
lexicográficamente es "temprano".fuente
'zeontw...ni'
terminó siendo más larga.Python 3, 141 bytes
Pruébalo en línea!
fuente
C (sonido metálico) , 229 bytes
Pruébalo en línea!
No hay una forma directa de enviar una matriz de series de cadenas a las funciones de C, por lo que, en el espíritu del código golf, me he tomado una libertad menor en el formato de entrada.
f()
acepta una matriz de punteros a cadenas, donde cada cadena es un número, representado por dígitos deletreados separados por comas en minúsculas. Además, necesita varias cadenas en la matriz en el segundo parámetro. Espero que esto sea aceptable.f()
reemplaza los punteros en su lugar en orden ordenado usandoqsort()
.r()
lee el número de entrada de una cadena de números separados por comas. Solo compara los dos primeros caracteres para identificar el número.c()
es la función de comparaciónfuente
strstr("i"-19,t)-"zeontwthfofisiseeini"
? ¿Es específico del compilador o estándar?.rodata
ese aspecto0x69 0x00
y el compilador coloca la dirección de"i"
al final de"zeo..."