Alfabetizar enteros
Para un conjunto dado de números, póngalos en orden alfabético cuando se deletreen (es decir, 1: uno, 2: dos, 90: noventa, 19: diecinueve). Su código debería funcionar para el rango [-999999, 999999]. La salida debe tener un delimitador entre números. Un espacio funcionará, al igual que un espacio y una coma como se muestra en los ejemplos a continuación. La entrada puede ser una matriz de enteros, una cadena de números delimitados, o como mejor le parezca. Se supone que todos los enteros son únicos.
Los números no están separados por guiones para los propósitos de este desafío y los espacios están ordenados alfabéticamente antes que cualquier otro personaje. Se supone que los números negativos se expresan usando la palabra minus. Por ejemplo, fourprecedería four thousandy el número se -40ordenaría usando la cadena minus forty. Suponga que todos los números estarán compuestos únicamente por palabras numéricas y sin conjunciones (por ejemplo, use en two thousand forty twolugar de two thousand and forty two).
Casos de prueba
Enteros de un solo dígito:
Entrada:
1, 2, 3, 4, 5
Salida:
5, 4, 1, 3, 2
Múltiples dígitos enteros:
Entrada:
-1002, 5, 435012, 4, 23, 81, 82
Salida:
81, 82, 5, 4, 435012, -1002, 23
Espacios entre palabras, sin guiones, comas o "y":
Entrada:
6, 16, 60, 64, 600, 6000, 60000, 60004, 60008, 60204, 60804
Salida:
6, 600, 6000, 16, 60, 64, 60000, 60008, 60804, 60004, 60204
Recuerde, este es el código de golf , por lo que gana el código con la menor cantidad de bytes. ¡No se permiten escapatorias!

Respuestas:
JavaScript (ES6),
189179186 bytesLa idea básica es convertir cada número de entrada en una cadena corta que esté en la posición lexográfica correcta en comparación con todos los otros pares de cadenas de números. Aquí está el diccionario utilizado: (No ejecute el fragmento; solo se utiliza para ocultar la lista larga).
Mostrar fragmento de código
Esto crea una forma muy concisa de asignar cada número a su posición lexográficamente correcta. Eso es lo recursivo
qfunción :El
0principio de la cadena es asegurar que, por ejemplo, 100 (one hundred, convertido aPK0) se ordene antes101(one hundred one, convertido aPKP). Esto crea un escenario extraño donde 0 (zero) se ordena al frente de la matriz, por lo tanto, para evitar esto, en la función de clasificación primero ordenamos los ceros a la derecha!x-!y||(....fuente
[1100, 1000]. Esperaría que la salida fuera1000 (one thousand), 1100 (one thousand one hundred), pero la salida es del mismo orden que la entrada.1000se analiza comoone thousand zero; Arreglaré esto momentáneamente. ¿Sin0embargo, debemos apoyar por sí mismos? Es un caso único que agregará 15 bytes más o menos a mi código.Informar 7,
214201118 bytesInform 7 es un lenguaje absolutamente terrible para el golf, por lo que quería darle una oportunidad aquí.
La sangría debe usar caracteres tab (
\t), pero a HTML no le gustan. Por el contrario, a Inform no le gustan los espacios para sangría, por lo que deberá reemplazar los espacios con pestañas si copia y pega el código desde aquí para probarlo. O simplemente copie y pegue de la fuente Markdown en su lugar.Golfizado:
A X: repita a través de la Tabla 1: ahora la entrada Q es "[Entrada R en palabras]"; ordenar la Tabla 1 en orden Q; diga "[R en la Tabla 1]".La entrada debe ser una tabla Inform, así (con
\tentre las columnas):Salida:
Esta función se ejecuta a través de la tabla una vez, agregando una representación textual de cada número en una nueva columna. Luego ordena las filas de la tabla de acuerdo con la columna de texto; en Inform, las cadenas se ordenan lexicográficamente. Finalmente, imprime la columna original en el nuevo orden. Convenientemente, el formato "crudo pero a veces útil" de Inform 7 para imprimir columnas de tablas resulta estar separado por comas, exactamente como se solicitó.
Ungolfed, con repetitivo que muestra cómo llamar a la función:
Para imprimir los números en orden alfabético: repita a través de la tabla de números ordenables: ahora la entrada del nombre es "[la entrada del índice en palabras]"; ordenar la tabla de números ordenables en orden de nombre; diga "[la columna de índice en la Tabla de números ordenables]". Tabla de números clasificables índice (número) nombre (texto) -1002 5 5 435012 4 4 23 81 82 Hay un cuarto. Cuando comienza el juego: imprime los números en orden alfabético.fuente
wordsuna referencia de las versiones detalladas de los números en Inform 7?say "[R entry] "debería ser suficiente.Mathematica, 67 bytes
Función sin nombre que toma una lista de enteros como argumento y devuelve una lista de enteros como su valor.
#~IntegerName~"Words"es una función integrada que cambia un número entero a su nombre en inglés.IntegerNamea veces tiene comas y guiones en su salida, por lo que laStringReplacellamada los elimina. (Lamentablemente, el guión es en realidad el carácter de 3 bytes, 8208, en UTF-8.) LuegoSortByordena la lista original alfabéticamente según el valor del nombre entero modificado.Una buena coincidencia:
IntegerNameusa ennegativelugar deminusen su salida, pero ninguna palabra que aparece en los nombres de ninguno de los números permitidos está alfabéticamente entre esas dos palabras, ¡por lo que no es necesario reemplazarla!(Punta de sombrero para ngenisis por recordarme
Sortby).fuente
IntegerName. La documentación de Wolfram dice que es unicode character 2010 .Bash + GNU utils + bsdgames, 52
I / O son líneas delimitadas por nueva línea.
number), seguido de un:forma numérica del número.sorted.sedelimina los caracteres principales hasta e incluyendo el:, dejando la forma numérica ordenada según sea necesario.numbermaneja correctamente "menos", y su salida está lo suficientemente cerca del formato específico quesortfunciona como se requiere. Produce "cuarenta y cuatro" en lugar de "cuarenta y cuatro", pero esto no debería importar desde la perspectiva de la clasificación.El paquete bsdgames puede necesitar instalación:
Las utilidades
sedysortcasi seguramente ya están en su distribución.fuente
-t:es inútil y puedes usarlonumber<<<&-t:. Sin embargo, laefunción val de sed ejecuta comandos usandosh, por lo que las funciones bash como<<<no funcionarán.shque trata de emular Posix sh tanto como sea posible, lo que significa que los bashismos como<<<están desactivados.sedLaefunción val de GNU inicia comandos con/bin/sh -c ...y no/bin/bash -c .... ¿Has probado esto?<<<, ni siquiera en modo posixPython + inflex,
979189 bytesUsó la
inflectbiblioteca para transformar lawordsmatriz de enteros en su representación fonética / de cadena. Almacenado en un diccionario de pares k / v donde las claves eran la representación numérica y los valores eran la representación de la cadena. Devuelve la lista de claves ordenadas por valores.EDITAR: ¡Guardado 5 y 3 bytes, gracias a ETHproductions y Alex.S!
fuente
a={x:inflect.engine().number_to_words(x)for x in words}.from inflect import*y tirandoinflect.en la segunda línea.Mathematica, 30 bytes
La siguiente respuesta genera una función pura que tomará una lista de enteros como entrada y los ordenará por su nombre alfabético. Justo lo que recetó el doctor ;)
Aquí está la versión sin golf:
Y aquí hay un ejemplo de uso:
Que también podría escribirse como
Producen salidas idénticas - en matemática,
f[x]es equivalente af@x.Hay una respuesta mucho más larga que otro usuario publicó en Mathematica. Esa respuesta trata de corregir algunas pequeñas diferencias entre la forma en que Mathica alfebatiza los números para ajustarse mejor a la forma en que los números indicados por OP deben alfebatizarse, sin embargo, las cosas que corrigen no afectan el orden de clasificación, y mi respuesta sale idénticamente a la suya:
fuente
TheirFordena correctamente 888 antes de 880,000, mientras queMyFque no lo hace. Probablemente el problema esté relacionado con el copiado y pegado del extraño guión: su versión deTheirFprobablemente está reemplazando los guiones normales (de los cuales no hay ninguno), mientras que la versión real reemplaza el extraño guión Unicode de 3 bytes. (Todavía sería interesante ver si es necesario eliminar comas).Lisp común, 113 bytes
No se necesitan bibliotecas externas.
Salida si
xes'(1 2 3 4 5):fuente