mbomb007 nous a demandé de faire un programme d'auto-mutilation . C'est un défi intéressant, mais personnellement, je n'aime pas encourager mes programmes à s'automutiler. J'aime à penser que, au cœur de chaque programme, un beau papillon attend pour éclater.
En tant que tel, pour mon tout premier défi Code Golf, je mets au défi Stack Exchange de métamorphoser un papillon. Votre programme doit accepter son propre code en entrée et en sortie, I am a caterpillar!
suivi du code d'un autre programme dans la même langue (vous pouvez mettre un séparateur entre les sorties ou non ... mais nous parlons de papillons, donc la beauté compte!). Ce deuxième programme devrait sortirI am a beautiful butterfly!
Métamorphose: ce programme devrait se modifier lui-même, c'est pourquoi il est lui-même passé en entrée. Je ne veux pas d'un programme imbriqué ennuyeux qui n'est rien d'autre qu'une instruction d'impression I am a caterpillar!
suivie de l'impression du code source. Vous devez métamorphoser le code lui-même, donc la réponse acceptable la plus ennuyeuse est celle qui imprime I am a caterpillar
, puis déchire une chaîne de l'entrée (qui se trouve être du code) et l'imprime. Bien sûr, il s'agit d'une petite exigence très délicate à écrire, donc cela devrait être considéré comme un "esprit du défi". L'exigence formelle va être définie à "Si votre programme reçoit une chaîne aléatoire de la même longueur que votre programme, il devrait y avoir moins de 5% de chances d'imprimer I am a butterfly
lorsque le deuxième programme est exécuté."
Sommaire:
- Écrivez un programme qui, lorsqu'il est fourni son propre code en entrée, imprime
I am a caterpillar!
suivi d'un bloc de code source (avec un délimiteur entre eux ou non). - Ce deuxième bloc de code source, une fois compilé / interprété comme le même langage, imprime
I am a beautiful butterfly!
- Si votre programme ne reçoit pas son propre code source en entrée et reçoit à la place une chaîne aléatoire de caractères qui ne correspond pas à son propre code, le résultat doit soit échouer à compiler / interpréter, soit ne pas imprimer
I am a butterfly!
pour au moins 95% de aléatoire chaînes (esprit: vous êtes censé lire votre propre code source à partir de l'entrée et l'assembler en un papillon).- Je suis à l'aise avec le fait que vous ne prouviez pas cela, tant que vous vous en tenez à l'esprit de l'idée de métamorphose, en modifiant votre propre code, mais si vous essayez de jouer à des jeux d'échappatoires pour contourner l'utilisation de vos entrées, attendez-vous à avoir pour le prouver.
- Des échappatoires standard s'appliquent
Je voudrais que ceux-ci soient jugés par leur beauté, mais c'est une approche résolument non quantitative, donc la route habituelle du "nombre d'octets" peut être utilisée pour juger
Bonus : -20% - choisissez une chaîne de 3 lettres qui ne correspond pas aux 3 premières lettres de votre programme. Si j'exécute le programme Caterpillar, mais que je modifie l'entrée de sorte que les 3 premiers caractères soient remplacés par les caractères spécifiés, imprimez I am Batman!
plutôt. Soyez toujours Batman. (Les mêmes règles de chaîne aléatoire s'appliquent pour cette ... métamorphose! )
Exemple 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