mbomb007 ci ha chiesto di fare un programma auto-mutilante . È una sfida interessante, ma personalmente non mi piace incoraggiare i miei programmi ad automutilarsi. Mi piace pensare che, al centro di ogni programma, vi sia una bellissima farfalla in attesa di scoppiare.
Come tale, per la mia prima sfida di Code Golf, sfido Stack Exchange a metamorfizzare una farfalla. Il tuo programma dovrebbe accettare il proprio codice come input e output I am a caterpillar!
seguito dal codice per un altro programma nella stessa lingua (puoi mettere un divisore tra gli output o no ... ma stiamo parlando di farfalle, quindi la bellezza conta!). Questo secondo programma dovrebbe essere prodottoI am a beautiful butterfly!
Metamorfosi: questo programma dovrebbe modificarsi, motivo per cui viene passato come input. Non voglio un programma nidificato noioso che non sia altro che un'istruzione print I am a caterpillar!
seguita dalla stampa del codice sorgente. Devi metamorfizzare il codice stesso, quindi la risposta più noiosa e accettabile è quella che stampa I am a caterpillar
, quindi strappa una stringa dall'input (che sembra essere codice) e la stampa. Naturalmente, questo è un piccolo requisito molto complicato da scrivere, quindi dovrebbe essere considerato come uno "spirito della sfida". Il requisito formale verrà impostato su "Se al tuo programma viene assegnata una stringa casuale della stessa lunghezza del tuo programma, ci dovrebbe essere meno del 5% di possibilità di stampare I am a butterfly
quando viene eseguito il secondo programma."
Sommario:
- Scrivi un programma che, quando viene fornito il proprio codice come input, stampa
I am a caterpillar!
seguito da un blocco di codice sorgente (con un delimitatore tra loro o meno). - Questo secondo blocco di codice sorgente, quando compilato / interpretato nella stessa lingua, viene stampato
I am a beautiful butterfly!
- Se al programma non viene inserito il proprio codice sorgente come input e viene invece fornita una stringa casuale di caratteri che non corrisponde al proprio codice, il risultato deve non riuscire a compilare / interpretare o non stampare
I am a butterfly!
per almeno il 95% di casuale stringhe (spirito: ci si aspetta che tu legga il tuo codice sorgente dall'input e lo unisca in una farfalla).- Mi sento a mio agio nel non provarlo, fintanto che ti mantieni allo spirito dell'idea di metamorfosi, modificando il tuo codice, ma se stai cercando di giocare a giochi di scappatoia per aggirare usando i tuoi input, aspettati di avere per dimostrarlo.
- Si applicano scappatoie standard
Vorrei che questi fossero giudicati in base alla loro bellezza, ma questo è un approccio decisamente non quantitativo, quindi il solito percorso "numero di byte" può essere usato per giudicare
Bonus : -20% - scegli una stringa di 3 lettere che non corrisponde alle prime 3 lettere del tuo programma. Se eseguo il programma Caterpillar, ma modifico l'input in modo che i primi 3 caratteri vengano cambiati in quelli specificati, stampa I am Batman!
invece. Sii sempre Batman. (Le stesse regole di stringa casuali si applicano per questa ... metamorfosi! )
Esempio di prova (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