Jak wiemy, quine to program, który wyświetla swój własny kod źródłowy. Można również napisać program, który wypisuje inny, inny program, który wypisuje ponownie pierwszy program. Na przykład program Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
po uruchomieniu wyświetli następujący tekst:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Po uruchomieniu jako program w języku Python, ponownie wyświetli oryginalny kod. Nazywa się to iterem iteracyjnym . Ponieważ musisz go uruchomić dwa razy, aby odzyskać oryginalny kod, mówimy, że ma on okres 2 . Ale oczywiście możliwe są znacznie wyższe okresy.
Twoim wyzwaniem jest napisanie iteracyjnej quine z tak długim okresem, jak to możliwe, w 100 bajtach lub mniej , w wybranym języku. (Zauważ, że mój powyższy przykład nie pasuje do tej specyfikacji, ponieważ ma 119 bajtów, w tym końcowy znak nowej linii).
Proszę zwrócić uwagę na następujące zasady i wyjaśnienia:
- Obowiązują zwykłe reguły quine, tzn. Twój program nie może korzystać z funkcji językowych, które umożliwiłyby mu bezpośredni dostęp do własnego kodu źródłowego.
- Powtarzane wyjścia muszą ostatecznie powrócić do dokładnie twojego oryginalnego kodu, i musisz dołączyć demonstrację lub dowód, że tak będzie.
- Musisz także wyjaśnić, dlaczego cykl trwa tak długo, jak to mówisz. Nie musi to być na poziomie matematycznego dowodu, ale powinno być przekonujące dla kogoś, kto zna twój język. (Ta reguła jest tutaj, ponieważ spodziewam się, że niektóre odpowiedzi będą dotyczyły bardzo, bardzo dużych liczb).
- Można powiedzieć coś w stylu „co najmniej 1 000 000 iteracji” zamiast podawać dokładną liczbę, o ile można udowodnić, że jest ona co najmniej tak długa. W takim przypadku wynik wyniósłby 1 000 000. W przeciwnym razie twój wynik jest okresem twojego quine.
- Limit 100 bajtów dotyczy tylko twojego programu początkowego - programy, które wysyła, mogą być dłuższe, ale oczywiście będą musiały wrócić do 100 bajtów, aby wyprowadzić oryginalny kod.
- Możesz założyć, że twoja maszyna ma nieskończoną pamięć RAM i nieskończony czas działania, ale nie możesz zakładać nieograniczonej precyzji typów danych (takich jak liczby całkowite), jeśli twój język ich nie ma. Państwo może założyć, nie ma ograniczeń co do długości wkładu Twój parser może obsługiwać.
- Najwyższy wynik wygrywa.
Uwaga: istnieje istniejące wyzwanie o nazwie Quit Whining; Rozpocznij quinowanie, które obejmuje również iterowanie quinów. Jednak oprócz tego, że opierają się na tej samej koncepcji, są to zupełnie inne rodzaje wyzwań. Drugi to prosty golf, podczas gdy ten (celowo!) Jest naprawdę zajętym problemem bobra w przebraniu. Techniki potrzebne do uzyskania dobrej odpowiedzi na to pytanie prawdopodobnie będą bardzo różnić się od potrzebnych do udzielenia odpowiedzi na inne pytanie, a to w dużej mierze z założenia.