mbomb007 nos pidió que hiciéramos un programa de mutilación automática . Es un desafío interesante, pero personalmente no me gusta alentar a mis programas a que se auto mutilen. Me gusta pensar que, en el corazón de cada programa, hay una hermosa mariposa esperando a salir.
Como tal, para mi primer desafío de Code Golf, desafío a Stack Exchange a metamorfosear una mariposa. Su programa debe aceptar su propio código como entrada y salida I am a caterpillar!
seguido del código para otro programa en el mismo idioma (puede poner un divisor entre las salidas o no ... pero estamos hablando de mariposas, ¡así que la belleza cuenta!). Este segundo programa debería generarI am a beautiful butterfly!
Metamorfosis: este programa debe modificarse a sí mismo, por lo que se pasa como entrada. No quiero un programa anidado aburrido que no sea más que una declaración de impresión I am a caterpillar!
seguida de imprimir el código fuente. Debe metamorfear el código en sí mismo, por lo que la respuesta aceptable más aburrida es la que imprime I am a caterpillar
, luego extrae una cadena de la entrada (que resulta ser el código) y la imprime. Por supuesto, este es un pequeño requisito muy difícil de escribir, por lo que debe considerarse como un "espíritu del desafío". El requisito formal se establecerá en "Si su programa recibe una cadena aleatoria de la misma longitud que su programa, debería haber menos de un 5% de posibilidades de impresión I am a butterfly
cuando se ejecuta el segundo programa".
Resumen:
- Escriba un programa que, cuando se proporciona su propio código como entrada, imprime
I am a caterpillar!
seguido de un bloque de código fuente (con un delimitador entre ellos o no). - Este segundo bloque de código fuente, cuando se compila / interpreta como el mismo idioma, imprime
I am a beautiful butterfly!
- Si su programa no recibe su propio código fuente como entrada, y en su lugar se le asigna una cadena aleatoria de caracteres que no coincide con su propio código, el resultado debe fallar al compilar / interpretar, o no imprimir
I am a butterfly!
al menos el 95% del azar cadenas (espíritu: se espera que lea su propio código fuente de la entrada y lo una en una mariposa).- Me siento cómodo con que no demuestres esto, siempre y cuando mantengas el espíritu de la idea de la metamorfosis, modificando tu propio código, pero si estás tratando de jugar juegos de lagunas para evitar el uso de tus entradas, espera tener probarlo.
- Se aplican lagunas estándar
Me gustaría que estos sean juzgados por su belleza, pero ese es un enfoque decididamente no cuantitativo, por lo que la ruta habitual de "número de bytes" se puede utilizar para juzgar
Bonificación : -20%: elige cualquier cadena de 3 letras que no coincida con las primeras 3 letras de tu programa. Si ejecuto el programa Caterpillar, pero modifico la entrada para que los primeros 3 caracteres se cambien a los especificados, imprima en su I am Batman!
lugar. Siempre sé Batman. ( Se aplican las reglas cadena aleatoria mismas para esta metamorfosis ...! )
Ejemplo trivial (python):
"""
print "I am a beautiful butterfly!"
#print "I am Batman!"
"""
import sys
code = sys.stdin.read()
if code.startswith("YYZ"):
# swap the comments between the print statements
code = code.replace("#print", "_a").replace("print", "#print").replace("_a", "print")
code = [3:] # remove """ or XYZ
code = code.split('"""')[0]
print "I am a caterpillar!"
print code