mbomb007 hat uns gebeten, ein selbstverstümmelndes Programm zu machen . Es ist eine interessante Herausforderung, aber ich persönlich möchte meine Programme nicht dazu ermutigen, sich selbst zu verstümmeln. Ich denke gerne, dass im Zentrum eines jeden Programms ein wunderschöner Schmetterling steht, der darauf wartet, auszubrechen.
Daher fordere ich Stack Exchange bei meiner allerersten Code Golf-Herausforderung auf, einen Schmetterling zu verwandeln. Ihr Programm sollte seinen eigenen Code als Eingabe und Ausgabe akzeptieren, I am a caterpillar!
gefolgt vom Code für ein anderes Programm in derselben Sprache (Sie können einen Teiler zwischen den Ausgaben setzen oder nicht ... aber wir sprechen von Schmetterlingen, also zählt die Hübschheit!). Dieses zweite Programm sollte ausgegeben werdenI am a beautiful butterfly!
Metamorphose: Dieses Programm sollte sich selbst modifizieren, weshalb es selbst als Eingabe übergeben wird. Ich möchte kein langweiliges verschachteltes Programm, das nichts anderes ist als eine print-Anweisung, I am a caterpillar!
gefolgt vom Drucken des Quellcodes. Sie müssen den Code selbst metamorphen, sodass die langweiligste akzeptable Antwort eine ist, die gedruckt wird I am a caterpillar
, dann eine Zeichenfolge aus der Eingabe (die zufällig Code ist) herausreißt und diese ausgibt. Natürlich ist dies eine sehr knifflige kleine Anforderung, die als "Geist der Herausforderung" betrachtet werden sollte. Die formale Anforderung wird festgelegt auf "Wenn Ihrem Programm eine zufällige Zeichenfolge mit der gleichen Länge wie Ihr Programm zugewiesen wird, sollte I am a butterfly
beim Ausführen des zweiten Programms eine Wahrscheinlichkeit von weniger als 5% für das Drucken bestehen ."
Zusammenfassung:
- Schreiben Sie ein Programm, das, wenn ein eigener Code als Eingabe bereitgestellt wird,
I am a caterpillar!
gefolgt von einem Quellcode-Block (mit einem Trennzeichen dazwischen oder nicht) druckt . - Dieser zweite Quellcodeblock wird gedruckt, wenn er in derselben Sprache kompiliert / interpretiert wird
I am a beautiful butterfly!
- Wenn Ihr Programm keinen eigenen Quellcode als Eingabe erhält und stattdessen eine zufällige Zeichenfolge erhält, die nicht mit seinem eigenen Code übereinstimmt, kann das Ergebnis entweder nicht kompiliert / interpretiert werden oder es wird nicht
I am a butterfly!
für mindestens 95% des Zufalls gedruckt strings (spirit: Es wird erwartet, dass Sie Ihren eigenen Quellcode aus der Eingabe lesen und zu einem Schmetterling zusammenfügen).- Ich bin damit einverstanden, dass Sie dies nicht beweisen, solange Sie an der Idee der Metamorphose festhalten und Ihren eigenen Code modifizieren. Wenn Sie jedoch versuchen, Lückenspiele zu spielen, um mit Ihren Eingaben umzugehen, sollten Sie dies erwarten es zu beweisen.
- Es gelten Standardlücken
Ich möchte, dass diese nach ihrer Schönheit beurteilt werden, aber das ist ein entschieden nicht quantitativer Ansatz, so dass die übliche "Anzahl von Bytes" -Route zur Beurteilung verwendet werden kann
Bonus : -20% - Wählen Sie eine beliebige 3-Buchstaben-Zeichenfolge, die nicht mit den ersten 3 Buchstaben Ihres Programms übereinstimmt. Wenn ich das Raupenprogramm ausführe, aber die Eingabe so ändere, dass die ersten 3 Zeichen in die angegebenen Zeichen geändert werden, drucken Sie I am Batman!
stattdessen. Sei immer Batman. ( Für diese ... Metamorphose gelten die gleichen zufälligen Zeichenkettenregeln! )
Triviales Beispiel (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