El rompecabezas
Un pequeño acertijo que escuché mientras estaba en la escuela secundaria fue algo como esto ...
- El interlocutor me pedía que le diera un número;
- Al escuchar el número, el interrogador haría algún tipo de transformación en él repetidamente (por ejemplo, podría decir que diez es tres ) hasta llegar al número 4 (momento en el que terminaría con cuatro es mágico ).
- Cualquier número parece transformarse eventualmente en cuatro, pase lo que pase.
El objetivo era intentar descubrir la función de transformación y luego poder supervisar este rompecabezas de manera confiable.
La solución
La función de transformación en cualquier paso era
- Tome el número en cuestión,
- Cuente el número de letras en su representación de palabras en inglés, ignorando un guión o espacios o "y" (por ejemplo, "diez" tiene 3 letras, "treinta y cuatro" tiene 10 letras, "ciento cuarenta y tres" tiene 20 letras).
- Devuelve ese número de letras.
Para todos los números que he querido probar, esto converge a 4. Dado que "cuatro" también tiene cuatro letras, habría un bucle infinito aquí; en cambio, simplemente se lo conoce como magia por convención para finalizar la secuencia.
El reto
Su desafío es crear un fragmento de código que lea un número del usuario y luego imprima líneas que muestren la función de transformación que se aplica repetidamente hasta que se alcance "cuatro es mágico".
Específicamente:
- Las soluciones deben ser programas completos en sí mismos. No pueden ser simplemente funciones que incorporan un factor numérico en la entrada.
- La entrada debe leerse desde la entrada estándar. (La canalización desde "echo" o el uso de la redirección de entrada está bien, ya que también va desde stdin)
- La entrada debe estar en forma numérica.
- Para cada aplicación de la función de transformación, se debe imprimir una línea:
a is b.
donde ayb son formas numéricas de los números en la transformación. - ¡Se requieren paradas completas (puntos)!
- La última línea debería decir naturalmente,
4 is magic.
. - El código debe producir una salida correcta para todos los números del 0 al 99 .
Ejemplos:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
El ganador es el envío más corto por número de caracteres del código fuente, que también es correcto .
PRIMA
También puede intentar escribir una versión del código que imprima los NOMBRES EN INGLÉS de los números con cada aplicación de la función de transformación. La entrada original sigue siendo numérica, pero las líneas de salida deben tener la forma de palabra del número.
(Doble bonificación por dibujar formas con su código)
(EDITAR) Algunas aclaraciones:
- Quiero que la palabra aparezca en ambos lados en todos los casos aplicables, p. Ej.
Nine is four. Four is magic.
- Sin embargo, no me importa el uso de mayúsculas. Y no me importa cómo separa la palabra tokens, aunque deberían estar separados:
ninety-nine
está bien,ninety nine
está bien,ninetynine
no está bien.
Considero que estas son una categoría separada para la competencia de bonificación con respecto al desafío, por lo que si opta por esto, no se preocupe si su código es más largo que la versión numérica.
No dude en enviar una solución para cada versión.