mbomb007 poprosił nas o stworzenie programu samookaleczającego . To ciekawe wyzwanie, ale osobiście nie lubię zachęcać moich programów do samookaleczania. Lubię myśleć, że w sercu każdego programu jest piękny motyl czekający na wybuch.
Jako taki, podczas mojego pierwszego w historii zawodów Code Golf, rzucam wyzwanie Stack Exchange metamorfozie motyla. Twój program powinien zaakceptować swój własny kod jako dane wejściowe i wyjściowe, I am a caterpillar!
a następnie kod innego programu w tym samym języku (możesz umieścić dzielnik między wyjściami, czy nie ... ale mówimy o motylkach, więc liczy się ładność!). Ten drugi program powinien zostać wygenerowanyI am a beautiful butterfly!
Metamorfoza: ten program powinien się modyfikować, dlatego jest przekazywany jako dane wejściowe. Nie chcę nudnego zagnieżdżonego programu, który jest niczym innym jak instrukcją print, I am a caterpillar!
po której następuje wydruk kodu źródłowego. Musisz przekształcić sam kod, więc najbardziej nudną akceptowalną odpowiedzią jest ta, która wypisuje I am a caterpillar
, a następnie wyrywa ciąg z wejścia (który jest kodem) i drukuje go. Oczywiście jest to bardzo trudny, mały wymóg pisania, dlatego należy go traktować jako „ducha wyzwania”. Wymaganie formalne zostanie ustawione na „Jeśli twój program otrzyma losowy ciąg o tej samej długości co twój program, powinno być mniej niż 5% szansy na wydruk I am a butterfly
po uruchomieniu drugiego programu”.
Podsumowanie:
- Napisz program, który po podaniu własnego kodu jako danych wejściowych wypisze
I am a caterpillar!
blok kodu źródłowego (z separatorem między nimi lub nie). - Drugi blok kodu źródłowego, po skompilowaniu / interpretacji jako ten sam język, zostanie wydrukowany
I am a beautiful butterfly!
- Jeśli twój program nie otrzymuje własnego kodu źródłowego jako danych wejściowych i zamiast tego otrzymuje losowy ciąg znaków, który nie pasuje do własnego kodu, wynik musi albo nie zostać skompilowany / zinterpretowany, albo nie zostać wydrukowany
I am a butterfly!
przez co najmniej 95% losowego strings (duch: oczekuje się, że przeczytasz własny kod źródłowy z wejścia i połączysz go w motyla).- Czuję się swobodnie z tym, że nie udowadniasz tego, dopóki trzymasz się ducha pomysłu metamorfozy, modyfikujesz swój własny kod, ale jeśli próbujesz grać w luki w grach, aby obejść się przy użyciu swoich danych wejściowych, spodziewaj się aby to udowodnić.
- Obowiązują standardowe luki
Chciałbym, aby były one oceniane na podstawie ich piękna, ale jest to zdecydowanie nie-ilościowe podejście, więc do oceny można użyć zwykłej trasy „liczba bajtów”
Premia : -20% - wybierz dowolny 3-literowy ciąg, który nie pasuje do pierwszych 3 liter twojego programu. Jeśli uruchomię program gąsienicowy, ale zmodyfikuję dane wejściowe, tak aby pierwsze 3 znaki zostały zmienione na określone, I am Batman!
zamiast tego wydrukuj . Zawsze bądź Batmanem. (W przypadku tej ... metamorfozy obowiązują te same losowe reguły strunowe ).
Trywialny przykład (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