Ganador: ¡ la respuesta contundente del profesorfish ! ¡Un total de 9 bytes! ¡Guauu!
Puede continuar enviando su respuesta, sin embargo, ya no puede ganar. Publicación original mantenida para la posteridad:
Su objetivo es convertir un número entero entre 1-9 en la palabra que representa.
- No tendrá que preocuparse por los decimales.
- El usuario ingresará un número. Suponga que nunca ingresarán nada de 10 o más
- El usuario debe escribir el número en algún momento, sin embargo , el método que lea el programa no importa. Puede ser con stdin, leer un archivo de texto, etc., sin embargo, el usuario debe presionar el botón 9 en su teclado (por ejemplo) en algún momento
- No distingue entre mayúsculas y minúsculas (es decir, "uno", "Uno", "oNe", "OnE", etc., todos son aceptables)
- Se permiten solicitudes HTTP / etc., sin embargo , cualquier código ejecutado por el servidor al que se hace la solicitud cuenta para el recuento de bytes de su código final (p. Ej., Si un programa C ++ realiza una solicitud HTTP, el código PHP utilizado en la solicitud HTTP cuenta )
- Cualquier cosa que pueda compilarse y ejecutarse es aceptable
- Este concurso finalizó el 27 de junio de 2014 (7 días después de la publicación).
- Este es un código de golf , por lo que gana el código más corto
one
aceptable el espacio en blanco final (es decir )?3
, no puede emitirone two three four five six seven eight nine
aunque técnicamente generethree
. Del mismo modo, no puede emitirthree seven
, etc.Respuestas:
Bash (con bsdgames), 9
Lee desde la entrada estándar.
No sé por qué hay una utilidad para esto, pero lo que sea.
fuente
Pitón 2, 64
Así es como se ve la cadena con algunos espacios en blanco adicionales (intente leer verticalmente):
Como se explica en los comentarios a continuación,
[input()::9]
comienza en el índice dado y selecciona cada noveno carácter posterior.fuente
input()::9
es un rango desdeinput()
el final de la cadena en pasos de9
, como1,10,19,28,37
o3,12,21,30,39
, que son exactamente los índices en los que se encuentran las letras de la palabra correspondiente.Lisp común - 22 bytes
Aquí hay uno general (no solo para uno-diez):
Oh, quieres ordinales (primero, segundo, ... trescientos ...)? ¡Okay!
fuente
BASH 51
Así que hice otra usando mi segunda idea más la ayuda de otros:
Donde 'X' es el número que deseas.
BASH 48 (67)
67 con
\n
saltos de líneaNo estoy seguro de si esto cuenta totalmente, porque está leyendo un archivo, pero:
sed -n Xp a
Donde "X" es la entrada y donde
a
hay un archivo con:El archivo tiene 36 caracteres y el comando bash es 13.
Cómo funciona:
fuente
a
.'
comillas. También puede intentar usar una cadena here en lugar del archivo externo. Pero realmente debe contar los saltos de línea en su archivo.C # - 127 (86/46)
Si solo toma la parte ejecutable ...
y si
HourOfDay
hubiera sido parte del espacio de nombres del Sistema, necesitaría 46 caracteres. Desafortunadamente se sienta enSystem.DirectoryServices.ActiveDirectory
lo que lo hace 86 ... el otro ruido lo estropea.Esto es compilable y ejecutable desde la línea de comandos (127 caracteres):
si se guarda en un archivo llamado cg2.cs
¿Como funciona esto?
HourOfDay
es un tipo de enumeración, por lo que podemos usar nombres en lugar de constantes mágicas. Los tipos de enumeración tienen una implementación ToString () que le da el nombre del valor . Puedes lanzar un int a una enumeración. Console.Read () lee un carácter del flujo de entrada representado como un entero. escribiendo '1' da 49 , resta 48 para obtener 1, reparto / cajaHourOfDay
para devolver 'Uno'.Echa un vistazo a la versión Powershell de este mismo truco
fuente
-48
aquí?Befunge 98,
116105103 bytesBefunge no fue hecho para esto ...
Explicación:
fuente
char[][]
, mantener unx
yy
ubicación, y ejecutar el personaje en ese lugar. Lo más difícil sería definir la operación para cada personaje posible.&1-
.Javascript 68
Atob / btoa puede ser una herramienta de compresión para hombres pobres
(pero si quieres probar esto en la consola, no puedes copiar desde el texto formateado que ves de inmediato. Ve a 'editar' y copia desde el panel de origen)Al editor Markdown no le gustan algunos de los caracteres de esta respuesta: algunos se pierden al guardar. Aún así, creo que es un problema de editor, no mío. Los caracteres perdidos son caracteres Unicode de 8 bits perfectamente válidos.
(De lo contrario, me equivoco, si este tema ya se debatió en meta, avíseme) Aquí está la versión con caracteres ofensivos escapados, cada secuencia \ xNN debe contar 1
Prueba simple
En la consola de Firefox:
fuente
Tree
yEightF
.Javascript 73
69
fuente
alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])
sería lo mismo pero te ahorraría 8 bytes? El usuario todavía ingresa el número que desea ...Perl, 55
Se ejecuta con la opción
-p
(+1 byte), por ejemplo:Se espera la entrada en STDIN y la salida se escribe en STDOUT.
El código solo genera una matriz y selecciona el elemento correcto. La opción
-p
se encarga de leer la línea de entrada$_
e imprime el resultado$_
.Variaciones:
Con una nueva línea al final (+3):
o (mismo recuento de bytes):
Actualizar:
Usando palabras desnudas en lugar de
qw[...]
(gracias Zaid).El índice negativo guarda un byte (gracias aragaer).
fuente
$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
use strict
)$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]
- Un personaje más corto.Oracle SQL - 46
Demostración
Esto incluye una escapatoria estándar , lo admito, pero el SQL es más corto que Golfscript; No pude resistir!
Funciona mediante (ab) utilizando los modelos de formato de fecha y hora de Oracle .
TO_DATE(n, 'j')
convierte un número en un día juliano , el número de días desde el 1 de enero de 4712 a. C.TO_CHAR(<date>, 'jsp')
convierte esto nuevamente en el entero (aunque como una cadena). Elsp
, es un sufijo de elemento de formato que deletrea el número. Esto realmente funcionará con bastantes números.La
&1
es una variable de sustitución que solo funcionará con clientes que la acepten, por ejemplo, SQL * Plus.fuente
CJam,
4543 bytesLo anterior usa la notación ^ y M, ya que algunos caracteres no se pueden imprimir.
Al costo de 9 bytes más, se pueden evitar los caracteres no imprimibles:
Pruébalo en línea.
Cómo funciona
Ejemplo
fuente
IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
GolfScript, 51 bytes
Es una tabla de búsqueda simple. Se evalúa la entrada (
~
), se crea una matriz de valores y se encuentra el índice.Pruébalo aquí
fuente
Try it here
enlace tiene un código diferente que el código pegado.Try it here
diferencia en el código del enlace se debe a que la página web no admite la entrada del usuario. Cambie la cadena después de;
, esto es idéntico a la entrada del usuario.Perl, 60 bytes
Requiere el
-p
conmutador (dos bytes).Ejemplo
Cómo funciona
-p
lee desde STDIN y guarda el resultado en$_
.=~/.[a-z]*/g
divide la palabra básica anterior en subcadenas de una letra (mayúscula) seguida de cualquier número de letras minúsculas.(…)
recoge las subcadenas en una matriz.[$_]
recupera la subcadena correspondiente a la entrada del usuario.$_=…
guarda el resultado en$_
.-p
imprime el valor de$_
.fuente
Lote DOS: 162 caracteres (incluidos los saltos de línea)
Esta respuesta fue inspirada por la respuesta de Python de @ grc, aunque tenía algo similar en mente.
Uso:
[Nombre de archivo] [número]
Por ejemplo, si el código está en un archivo llamado speak.bat y desea ver el número "cinco", lo ejecutará como:
speak 5
Además, la salida es de arriba a abajo, ¡no de izquierda a derecha! Entonces en lugar de
ya verás
fuente
Bash + coreutils, 64
Concepto de compresión no competitiva
Es posible que algunos de los personajes exóticos no se reproduzcan bien, por lo que este script puede reconstruirse a partir de su representación base64:
Salida de ejemplo
Explicación
Se me ocurrió que la cadena
one two three four five six seven eight nine
contiene solo las letrasefghinorstuvwx
y un separador de espacio: 15 valores de caracteres en total. Por lo tanto, cada carácter puede representarse potencialmente en 4 bits o 2 caracteres por 1 byte. Podemos usar la representación hexadecimal de un byte como una forma fácil de dividir cada byte en dos dígitos hexadecimales. Luego podemos transformar los dígitos hexadecimales a las letras que necesitamos usandotr
o similar. La suerte quiso querstuvwx
son consecutivos, por lo que puede expresarse comor-x
atr
. La codificación está dispuesto de tal manera quee
yf
se deja como está, y que las palabras son salto de línea separada, por lo que podemos utilizarsed
para ouptut sólo la línea que necesitamos.Este proceso de decodificación termina usando una cantidad considerable de espacio extra, por lo que hace que esta respuesta no sea competitiva como una respuesta estilo shell-script, pero puede ser un concepto útil en otros idiomas.
fuente
(puro) Bash, 64
Toma la entrada como su primer argumento, suponiendo una entrada válida.
Crea una matriz
v
y luego accede al elemento especificado en la entrada. Como las matrices están indexadas a cero, tuve que agregar un elemento 0 como marcador de posición. Alternativamente (thnx @DennisWilliamson por señalar esto):fuente
v=(one two three four five six seven eight nine)
yecho ${v[$1-1]}
Python 2.x -
sesenta y cinco64No tan bueno como la respuesta de @grc, pero ciertamente más legible :-)
Un char menos, gracias a @flornquake
fuente
'nine eight seven six five four three two one'.split()[-input()]
Java 7 - 185
fuente
C 111
La longitud que aquí se ha diseñado cuidadosamente para que pueda interpretarlo como binario y convertir que a decimal. ¡Con solo 7 personajes, estoy seguro de que tengo un ganador!
fuente
#include
emain()
's tipo de retorno. También un poco de refactorización de la expresión:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}
. 86 caracteres por mi cuenta.111
binario, eso se convertiría7
en decimal.bash say (OS X):
38"Su objetivo es convertir un número entero entre 1-9 en la palabra que representa"
La última vez que lo revisé, las palabras habladas también son palabras. Intento anterior (no acepta entrada)
say 4
Editar, debe poder leer la entrada:
Escriba cualquier número y saldrá la palabra. Sé que la fecha de finalización se debe, pero en mi opinión, debería haber ganado el concurso.
Archivo de audio de ejemplo: four.aiff
fuente
VBScript
988075fuente
J -
68 o 6057 o 53 bytesVersión interactiva (stdin):
Versión de la función:
Explicación:
".(1!:1)1
lee una cadena y la convierte a enterofuente
(;:'one two blah')>@{~<:
) y otros seis utilizando el gerundio enone`two`blah
lugar de;:
.>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1
es 3 caracteres más cortos.Perl 36 (58 independiente)
O, sin módulos adicionales:
fuente
Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1.
BEGIN failed--compilation aborted at toto.pl line 1.
syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)"
Execution of titi.pl aborted due to compilation errors.
En AppleScript; 123 caracteres
Este script toma la entrada en un diálogo. Luego da la salida en el resultado de AppleScript .
Ejemplo:
6
"six"
Aquí hay una versión más bonita:
Esta versión muestra la salida en un bonito diálogo.
Ejemplo:
9
nine
[Respuesta editada; mejoró ligeramente el diálogo para la entrada; Todavía 124 caracteres. Respuesta editada nuevamente; ahora 1 char menos! ]
fuente
set n to text returned of
... Guau.Powershell -
9174Descubrí cómo emitir para eliminar la llamada Enum y ToObject:
¿Como funciona esto?
HourOfDay es un tipo de enumeración, por lo que podemos usar nombres en lugar de constantes mágicas. Los tipos de enumeración tienen una implementación ToString () que le da el nombre del valor constante. Puedes lanzar un int a una enumeración. Console.Read () lee un carácter del flujo de entrada representado como un entero. escribir '1' da 49, restar 48 para obtener 1, lanzar a HourOfDay para devolver 'One'.
Debido a que powershell hace un ToString en todos los objetos que se escriben en la secuencia de salida y no necesita la pelusa para convertir esto en un ejecutable, todo lo que se necesita además de powershell ...
fuente
CJam - 50
Esta es una solución ASCII simple que utiliza solicitudes HTTP (esto está permitido en la pregunta):
En el servidor hay 9 archivos de texto sin formato denominados 1, 2, ..., 9, cada uno con la palabra correspondiente.
Tamaño total: 14 + 3 ("uno") + 3 ("dos") + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Se puede jugar más al golf utilizando un dominio más corto.
El intérprete en línea no admite solicitudes HTTP, por lo que el programa debe ejecutarse utilizando el intérprete de Java .
fuente
Lote - 86
Mucho más corto que el otro lote de respuesta, y en realidad sorprendentemente competitivo.
Se usa como
filename.bat number
, y la salida tiene la forma de un archivo con el nombre del número correcto.fuente
Rubí 64
fuente
9-1
cuando solo puedes decir8
? Por supuesto ambos9-1
y8
están equivocados; este script genera "nueve" todo el tiempo e ignora la entrada.BASH 9
descarada réplica de Linux de la respuesta de cousincoicane
habla uno
fuente
GolfScript, 50 bytes
Quería ver si podía superar la solución de GolfScript autónoma de 51 bytes de Quincunx . Resulta que, con suficientes trucos, sí, puedo hacerlo, por un byte.
Dado que uno de los trucos que estoy usando es el uso de bytes fuera del rango ASCII imprimible, el programa resultante no se puede pegar directamente aquí. En cambio, estoy proporcionando un volcado hexadecimal; los usuarios en sistemas Unixish pueden usar
xxd -r
para reconstruir el programa GolfScript de 50 bytes real del volcado hexadecimal:El truco básico utilizado para generar este programa es simple: comprimo el literal de cadena larga que constituye la mayor parte del código de Quincunx restando 99 (el código ASCII de la letra
c
) de los valores de los caracteres, interpretando los valores resultantes como un número en la base 22 (suficiente para codificar las letras hastax
) y luego volver a codificar el número resultante en la base 255 para producir la cadena de bytes no imprimible que constituye la mayor parte de la primera mitad de mi programa. El resto del programa luego invierte este proceso, decodificando la cadena nuevamente en algo imprimible.(Dado que la letra más baja realmente presente en los nombres de los números es
e
, podría haber acortado aún más la cadena de bytes restando 101 de los códigos ASCII y usando la base 20. Sin embargo, restando 101 habría mapeado la letrao
a una nueva línea, que yon
Estoy usando como delimitador de números porque está convenientemente disponible como la constante incorporada en GolfScript. Trabajar alrededor de eso me costaría más que un byte que ahorraría usar una base más baja. El uso del desplazamiento 99 deja la nueva línea correspondiente a la letram
, que está convenientemente ausente de los nombres de los números).Aquí hay una versión de golf del programa:
fuente