Dado un entero no negativo ( n
), cree una función que regrese n
en orden alfabético, de acuerdo con la ortografía literal de cada dígito en n
.
Ejemplos:
Input: 101
>> one, zero, one
>> one, one, zero
Output: 110
Input: 31948
>> three, one, nine, four, eight
>> eight, four, nine, one, three
Output: 84913
Input: 5544
>> five, five, four, four
>> five, five, four, four
Output: 5544
Input: 1234567890
Output: 8549176320
Nota: las operaciones en el ejemplo son solo ilustrativas y no necesitan ser incluidas en la salida. Solo debe devolverse el número ordenado alfabéticamente.
Este es el código de golf, por lo que gana el código más corto en bytes.
Editar: la entrada se puede tomar en cualquier formato deseado que mejor se adapte a su idioma, y la salida se puede producir de manera similar al regresar de la función o imprimir. La entrada siempre será un número natural (incluido 0) y no contendrá ceros a la izquierda.
Entrada OEIS relevante (A057846) encontrada por @DomHastings
00
....849
, ¿eso significa que podemos imprimir el número849
pero no la cadena"849"
? En mi opinión, este es solo un engorroso formato de E / S (¡malo!) Además de un desafío perfecto.001
salida? Si son significativos y el resultado no lo es1
, la mayoría de los idiomas requerirán cadenas como entrada por el simple hecho de que es tosco, poco práctico y casi imposible pedirle al analizador que conserve los ceros a la izquierda en números literales de base 10.Respuestas:
Perl 6 ,
3228 bytesExplicación:
Prueba:
fuente
05AB1E,
121110 bytesExplicado
Pruébalo en línea
Guardado 1 byte gracias a Adnan
fuente
JavaScript (ES6), 54
Edite el mismo recuento de caracteres, pero evite la variable global
z
Entrada / salida como cadenas
Prueba
fuente
z
...Haskell,
62 5144 bytesComo sugirió @nimi, usar una comprensión de lista es más corto que componer funciones:
Para referencia mi versión:
La versión sin puntos es un poco más larga:
Directo: filtre los dígitos en el orden correcto y luego concatene el resultado.
fuente
Pyth,
1210 bytesNo estoy seguro si se puede jugar más al golf. La entrada debe estar entre comillas.
¡2 bytes guardados gracias a @isaacg!
En pseudocódigo pitónico:
Pruébalo aquí .
fuente
549176320
conC" Ȁ\0
\0
. Ese es probablemente el problema con el que te estabas encontrando.Perl, 37 bytes
Código de 36 bytes + línea de comando de 1 byte (-F)
Ejemplo de uso:
fuente
MATL , 19 bytes
Pruébalo en línea!
Explicación
fuente
Jalea, 11 bytes
Pruébalo aquí
Explicación
fuente
Mathematica
35 7847 bytes¡31 bytes guardados gracias a una sugerencia de LIAMnYP!
IntegerDigits
divide el número en dígitos que luego se ordenan según sus nombres en inglés.FromDigits
ensambla los dígitos en un número base 10.8549176320
fuente
FromDigits@SortBy[IntegerName]@IntegerDigits@#&
Interpreter
es dolorosamente lento, por lo que es una ventaja adicional.C,
142141117Pase el parámetro
long long *
af()
; la función modifica el parámetro:long long
es necesario ya que el último caso de prueba se desbordóint
cuando se ordenó.fuente
Python 2 - 95 bytes
Intentando más golf ... Creo que la línea 2 es innecesaria y esto puede convertirse en 1 lambda.
EDITAR: versión de 49 caracteres en comentarios, gracias a xnor y vaultah por ayuda.
fuente
lambda n:''.join(sorted(`n`,key="8549176320".find))
8
para que elfind
da -1.lambda n: "".join(sorted(n,key="549176320".find))
, que es muy similar a lo que sugirió, vaultah. ¡Deberías publicarlo!- Oracle 11 (SQL): 164 bytes
Forma larga y explicación
Obtenga la entrada como parámetro para el script:
"crear" filas usando connect by según la longitud de la entrada:
Extraiga cada dígito de la cadena para cada posición:
Convierta el dígito a fecha juliana y vuelva a Char para obtener la ortografía:
Verificar cero - caso especial.
Utilice la función LISTAGG para concatenar filas nuevamente en una sola lista de filas, delimitada por comas, ordenada alfabéticamente
Siempre es divertido tratar de ajustar SQL para cosas como esta ... :) realmente prueba mi conocimiento del bugger ...
fuente
Rubí, 60 bytes.
fuente
Raqueta,
142130 bytesDe las cuales las conversiones son
más decasi la mitad de la longitud (7664 bytes).fuente
(+ 1 answer)
para raqueta!TSQL, 260 bytes
Se utilizó la clasificación de burbuja invertida para evitar referirse a la longitud, para guardar algunos bytes
Golfizado:
Sin golf:
Insistiendo en usar tipos enteros como entrada y salida agregada 37 bytes
fuente
DECLARE @ varchar(99)=101
0.o101
se convierte automáticamente en una cadena?stuff
es un nombre de función objetivamente horrible.squash
oshove
opack
sería mejor: Pstuff
porque eso es lo que hacen las funciones: hacen cosas. Entonces su código puede versestuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
ClojureScript, 45 bytes
Utiliza un poco de conversión de string-> int de fuga de Javascript, por lo que no es válido Clojure.
fuente
Firebird, 317 bytes
Golfizado:
Sin golf:
No hay funcionalidad dividida en Firebird. En su lugar, creé una consulta recursiva para obtener el siguiente personaje una y otra vez. Luego, vuelva a seleccionarlos mientras ordena por nuestro orden adecuado. Finalmente concatene esos resultados nuevamente en una lista. Anule el delimitador de coma predeterminado con un espacio en blanco. Podría ahorrar 11 bytes creando una nueva tabla ficticia en lugar de hacerlo,
rdb$database
pero pensé que podría estar en contra de las reglas.fuente
ZX Spectum, código de máquina,
5348474544 bytesconvtab defb 249 ; zero defb 244 ; one defb 248 ; two defb 247 ; three defb 2+205 ; four defb 1+205 ; five defb 246 ; six defb 245 ; seven ; defb 0 ; eight ; defb 3 ; nine ; last 2 conversions hidden in call-command
fuente
Factor, 128
¡Hurra por las builtins! :RE
fuente
PHP, 126 bytes
Hasta donde sé, php no tiene ningún componente integrado que realmente ayude con esto (lo mejor que pude hacer usando un usort (str_split ()) fue 5 bytes más largo), así que lo único que estoy contento con esta respuesta es el juegos jugados con $ i para ahorrar un par de bytes en la iteración.
fuente
APL, 23 bytes
Explicación:
n←⍕⍵
: obtener la representación de cadena den
y almacenarla enn
'8549176320'⍋
: encuentra una permutación den
ese tipon
dada la orden8549176320
.n[
...]
: reordenarn
por esa permutación⍎
: evalúa el resultado (para volverlo a convertir en un número)fuente
⍎
y⍕
. Convertir a tradfn mediante la eliminación{
y}
y sustituyendo⍞
a⍵
. Finalmente, elimine0
como clasificaciones no listadas al final:n['854917632'⍋n←⍞]
Clojure, 53 bytes
Bueno, la idea de comprensión de listas de la solución de Haskell parece ser la más corta:
Mi enfoque original es 1 byte más largo:
Puede ver ambas funciones en línea aquí: https://ideone.com/afac5n
fuente
Lisp común, 104
Sin golf
Convierta un entero como una cadena, ordene los caracteres usando la
string<=
comparación mientras usa una:key
función personalizada que convierte un carácter dado como la representación en inglés del valor numérico que representa. Por lo general, no usaría una función clave que haga tanto como esta, pero cuesta menos en bytes que decorar / ordenar / decorar.fuente
Python 3, 234 bytes
Esta es una traducción directa de mi respuesta Factor , solo por diversión.
La semántica de la evaluación del mapa "perezoso" y los objetos zip es la pieza más sutil de excremento de caballo genuino difícil de encontrar que induce a los insectos en el universo. A veces,
s = map(f, x)
no permitirás
que se use correctamente o en absoluto.fuente
Pyke, 14 bytes
Pruébalo aquí!
fuente
C, 80 bytes
Toma una cadena que contiene un número en la base 10 e imprime en
stdio
:fuente
Python 2.7.11, 67 bytes
Toma una cadena como entrada y genera una cadena.
fuente
Python 3, 74 bytes
fuente
PHP , 107 bytes
Pruébalo en línea!
Utiliza una función de comparación definida por el usuario para ajustar el orden de clasificación.
Salida
fuente