Pronunciando maleficio
Para aquellos de ustedes no iniciados con el programa Silicon Valley, este desafío está inspirado en un intercambio que dice así ( YouTube ):
Kid -
Here it is: Bit… soup. It’s like alphabet soup, BUT… it’s ones and zeros
instead of letters.
Erlich Bachman -
{silence}
Kid -
‘Cause it’s binary? You know, binary’s just ones and zeroes.
Erlich Bachman -
Yeah, I know what binary is. Jesus Christ, I memorized the hexadecimal
times tables when I was fourteen writing machine code. Okay? Ask me
what nine times F is. It’s fleventy-five. I don’t need you to tell me what binary is.
Cabe señalar que técnicamente, 0x9 * 0xF = 0x87
no 'fleventy-five', pero esto plantea una pregunta importante: ¿cómo se pronunciaría hexadecimal en la conversación? No es como oh ex eff eff
fluir fácilmente de la lengua, entonces, ¿qué debemos hacer? Aquí hay una práctica tabla de pronunciación que seguiremos.
A = ay A0 = atta-
B = bee B0 = bibbity-
C = cee C0 = city-
D = dee D0 = dickety-
E = ee E0 = ebbity-
F = eff F0 = fleventy-
Podemos dividir un número hexadecimal de 4 longitudes en dos grupos de dos y determinar la pronunciación de la tabla anterior, así como la pronunciación común en inglés para los números. Entonces, por ejemplo 0xFFAB
, obtendríamos Fleventy-eff bitey atta-bee
.
Si se incluye un número, como 0xF5AB
, imprimiría Fleventy-five bitey atta-bee
. Además, si un número comienza uno de los grupos, debe usar su pronunciación de "decenas". Por ejemplo, 0x5FAA
se convertiría Fifty-eff bitey atta-ay
. En el caso de que tenga algo así 0x1FAC
, esto sería Effteen bitey atta-cee
. Pero, si esta regla se usara 0x1AF4
, a-teen
podría confundirse eighteen
, por lo que debe anteponer una Y. Entonces, la salida correcta seríaYayteen bitey fleventy-four
En el caso de 0xD0F4
, en lugar de hacerlo Dickety-zero bitey fleventy-four
, ignoraríamos el cero e imprimiríamos Dickety-bitey fleventy-four
.
Los guiones solo deben aparecer dentro de los grupos de dos, es decir, la mordida no debe conectarse a ningún grupo con un guión a menos que el primer grupo sea solo una palabra. Así 0x04F4
sería four-bitey fleventy-four
, pero 0x44F4
sería forty-four bitey fleventy-four
. Como dijo trichoplax , la mordida solo se debe guiar cuando se sigue un número redondo.
Para una visión completa de cómo funcionará esto, consulte el ejemplo de E / S a continuación.
Objetivo
Cree un programa o función que tome una cadena hexadecimal como entrada o un argumento de función y produzca su pronunciación. La salida debe tener una capitalización adecuada. Puede suponer que la longitud de este número siempre será 4.
Ejemplo de E / S
"0xFFFF" -> "Fleventy-eff bitey fleventy-eff"
"0x0000" -> "Zero"
"0x0010" -> "Ten"
"0x0100" -> "One-bitey zero"
"0x1110" -> "Eleven-bitey ten"
"0xBEEF" -> "Bibbity-ee bitey ebbity-eff"
"0x9999" -> "Ninety-nine bitey ninety-nine"
"0xA1B2" -> "Atta-one bitey bibbity-two"
"0x3C4F" -> "Thirty-cee bitey forty-eff"
"0x17AB" -> "Seventeen-bitey atta-bee"
"0x1AFB" -> "Yayteen-bitey fleventy-bee"
"0xAAAA" -> "Atta-ay bitey atta-ay"
Este es el código de golf , por lo que gana el menor número de bytes.
fuente
Respuestas:
Pyth -
312293286251 bytesEs hora de comenzar a reducir los datos, más por venir.
Santo programa Pyth más grande que he escrito! Todavía hay una gran compresión posible con los datos, tanto algortihimically como la conversión de base, pero solo quería poner esto.
Interpreto la entrada como literal hexadecimal a través de Q que detecta automáticamente con el
0x
. Luego lo divodé 256 en los bytes, y elimino el primer byte si es cero, luego lo mapeo a través de dos matrices, una para0-1F
y luego20-F0
. El segundo también obtiene un divmod a través de la primera matriz. La primera opción obtiene un himno al final, y la segunda obtiene un guión en el medio y un espacio al final. Únase"bitey "
, capitalice con rango y elimine guiones con.s
y estamos bien.La parte de compresión base también es interesante porque comencé con la conversión básica 128 -> 256. Pero ahora, lo que estoy haciendo es usar
"q"
como separador en lugar de espacio. Por lo tanto, ahora puedo considerar la cadena como una cadena base 26xLG
, mejorando enormemente la compresión.Pruébalo aquí en línea .
Banco de pruebas .
fuente
0x112233
y0x93FBAC09
Ninety-three bitey fleventy-bee halfy atta-cee bitey nine
?Truebitey
syFalsebitey
s.Java - 856 bytes
No breve pero al menos la segunda respuesta;)
Es un método llamado
String p(String n)
que hará el trabajo:fuente
Javascript -
577719 bytesEstoy seguro de que hay mejoras por hacer. Bonificación adicional, analiza cadenas hexadecimales de longitud arbitraria.
EDITAR: Vaya, no funciona bien cuando hay ceros a la izquierda. Hm.
EDIT 2: arreglado, creo. JSFiddle
fuente