Masz napisać program, który wyśle kod źródłowy, który jest
- Większy niż oryginalny program (pod względem znaków)
- Po uruchomieniu wydrukuje inny program większy niż on sam (tj. Nowy program jest również prawidłową odpowiedzią na to wyzwanie)
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź.
code-golf
quine
code-generation
PyRulez
źródło
źródło
:^)
Odpowiedzi:
GS2 (8636bd8e) , 0 bajtów
Spowoduje to wydrukowanie jednej nowej linii, która wypisze dwie nowe linie, która wypisze trzy nowe linie, i tak dalej.
Wypróbuj online!
źródło
H9 + : 1 znak
Zgadza się. Jedna postać. Wysyła tekst do 99 butelek piwa , co jest prawidłowym programem. Wszystkie zewnętrzne dane się nie liczą, ale jest tam mnóstwo
9
s.Rezultatem wyprodukowanego programu jest tekst do 99 butelek piwa 59 razy.
Ta funkcja podaje liczbę wyświetleń tekstu, jeśli uruchomisz
n
czasy programu (jeśli moje obliczenia są prawidłowe):źródło
2*59^n-2
wystąpienia „Witaj, świecie!”, Ze względu na „h” w „the”.GolfScript, 9 znaków
Ten kod generuje:
które wyjścia:
które wyjścia:
i tak dalej.
Uważam, że jak dotąd jest to najkrótsza odpowiedź w „prawdziwym” języku programowania Turinga.
Wyjaśnienie:
Zasadniczo powyższy oryginalny kod jest „warstwą quine”: wyprowadza normalną quine, po której następuje sama.
W GolfScript każdy literał bloku kodu (np.
{foo}
), Jeśli pozostanie niezakłócony na stosie, jest quine. Tak więc,{.'.~'}
sam z siebie wypisuje, tak jak każdy inny blok kodu.Na
.~
końcu kodu pobiera ostatni blok kodu na stosie, kopiuje go i wykonuje kopię. Po uruchomieniu kod.'.~'
wewnątrz bloku kodu duplikuje najwyższy element na stosie (tj. Jego kopię) i dołącza ciąg.~
.Na końcu programu interpreter GolfScript strituje i wypisuje wszystko na stosie, który w tym przypadku składa się z jeszcze jednego
{.'.~'}
bloku niż na wejściu oraz łańcucha.~
.Premia:
Dodanie
]
przed pierwszym.
(aby zebrać wszystkie bloki kodu na stosie do tablicy przed ich zduplikowaniem) powoduje, że rośnie on wykładniczo:wyjścia:
które wyjścia:
które wyjścia:
i tak dalej.
źródło
{].'.~'}.~︵ ┻━┻
Znaki Java 7: 0
Zapisz jako plik
Blank.java
. Jeśli zapiszesz go jako inny plik, zastąp dowolne wystąpienieBlank
odpowiednią nazwą pliku.Następnie uruchom w wierszu poleceń, najpierw kompilując, a następnie uruchamiając. Jeśli kompilacja się nie powiedzie, zatrzymaj się.
Podaję to jako Java 7, ponieważ może to wyglądać inaczej dla różnych wersji Java.
Pierwsze kilka wyników (wysyłanych do stderr):
źródło
stdout
), nic nie jest faktycznie wyjściem.HQ9 +, HQ9 ++ i podobne, 2 znaki
To jest wynik:
źródło
2^2^n
tam, gdzie początkowym programem jest generacja 0. Długość się powtarzam -> m^2
.n
wynik staje sięn^n
. To jednak fałsz; gdy długość kodu ton
, długość wyjściowa ton^2
Rubin 27
Bardzo nieznacznie zmodyfikowana wersja tego ( przez ):
Liczba
puts
wydrukowanych linii rośnie wykładniczo.źródło
Rachunek Lambda - 29
Prosty termin lambda
Skrócenie tego terminu o jedną redukcję beta daje
I tak dalej i tak dalej. Jest to prosty wariant klasycznego,
(λu.u u)(λu.u u)
który jest rachunkiem różniczkowym w rachunku lambda, podwójne zastosowanie tutaj oznacza, że otrzymujemy podwójną moc wyjściową.źródło
Skrypt SH, 9
Rośnie w tempie wykładniczym.
Uruchom jako
sh whatever.sh
lub ustaw jako plik wykonywalny.Wersja systemu Windows jest tutaj .
źródło
dc 11
Całkiem proste:
Pierwszy wiersz jest powtarzany raz na każde pokolenie:
Ostatni wiersz składa się z następujących instrukcji:
d
duplikuje ostatnią wartość umieszczoną na stosie (6579792) (abyśmy otrzymywali jeszcze jedną kopię za każdym razem, gdy go uruchamiamy),f
drukuje cały stos (który jest wiązką tej samej liczby) iP
drukuje liczbę (6579792) jako strumień bajtów, który wyświetla się jakodfP
.źródło
redcode (rozwiązanie rekurencyjne)
Oto kod najłatwiejszego do zapisania wojownika w redcode , słynnego Imp:
Po wykonaniu kod zapisuje kopię swojej pojedynczej instrukcji pod następnym adresem w pamięci; następnie wykonuje to itp.
źródło
Python 3 - 55
Można to skrócić, zastępując __ plik__ jednoznakową nazwą pliku i zapisując plik jako taki, ale czułem, że ta odpowiedź była bardziej zgodna z duchem pytania. Po jednej iteracji generuje:
źródło
Smalltalk,
125 6157Wersja golfowa wygląda prawie nieczytelnie, więc najpierw wyjaśnię (i użyję prawdziwych identyfikatorów).
Jest to wariant metody samodzielnej modyfikacji „najdziwniejszego sposobu na wytworzenie przepełnienia stosu”.
Metoda wypisuje komunikat „witaj” i jego bieżące źródło (tylko dla celów demonstracyjnych). Następnie kod jest modyfikowany, aby wyświetlać dłuższy ciąg i instalowany. Wreszcie nowy kod jest nazywany rekurencyjnie.
Aby uchronić się przed natychmiastowym niekontrolowanym, pozwala użytkownikowi potwierdzić w każdym cyklu.
skompiluj w obiekcie:
rozpocznij pokaz, wysyłając „eatMe_alice” do dowolnego obiektu; zero zrobi:
nil eatMe_alice
Przyjemnym wariantem jest nie wywoływanie nowego kodu rekurencyjnie, ale iteracyjnie, przez cofnięcie stosu wywołań i ponowne wejście do nowej metody. Ma to tę zaletę, że nie prowadzi do wyjątku rekurencji. Aby to zrobić, zastąp wywołanie rekurencyjne („self eatMe_alice”) przez:
Gra w golfa:
Oczywiście nie wymagano drukowania i samodzielnego dzwonienia, więc najkrótsze (dla golfa) jest po prostu dodanie komentarza do mojego źródła i zwrócenie go. Jako efekt uboczny instaluje się go również do następnego połączenia ...
źródło
Skrypt SH,
1287Zapisz plik w
we własnym, pustym katalogu i uruchamiaj go z tego katalogu, używając
sh [file]
lub ustawiając plik wykonywalny.Stara alternatywa z 8 znakami , ale nie potrzebuje własnego katalogu. Zapisz plik w
i uruchom używając
sh [file]
lub ustawiając plik wykonywalny.Stara alternatywa z 12 znakami :
To faktycznie wyświetli dane wyjściowe do samego pliku programu, ale nie podano gdzie dane wyjściowe. Replikuje się w tempie wykładniczym.
źródło
ed
, nie chciałeś przeglądać jego stronyJavaScript,
41, 40 znakówPrzy pierwszym uruchomieniu program wypisuje się z innym
;f()
na końcu. Kolejne przebiegi wyjściowe powodują dwukrotne wydrukowanie każdego źródła „wejściowego”.alert
byłby krótszy niż,console.log
ale nie uważam wielu okien dialogowych z alertami za wyjściowe, podczas gdy rozsądne wydaje się wywoływanie wielu linii w konsoli jako wyjściowych.źródło
"f(f())"
zamiast"f();f()"
J , 1 bajt
Wypróbuj online!
Otwarta oferta zawiera oczywiście błąd otwartej oferty:
Zauważ, że z natury interpretera J błędy są drukowane do STDOUT , a nie do STDERR.
Gdy powyższe zostanie uruchomione jako kod, zostanie wydrukowane:
Następnie
i tak dalej. Za każdym razem, gdy kod jest uruchamiany, drugi wiersz jest uzupełniany w lewo czterema bajtami
|
, spełniając wymagania tego wyzwania.J , właściwy wariant quine, 25 bajtów
Wypróbuj online!
Wyjścia
A potem wysyła się dwukrotnie, w osobnych wierszach:
następnie
i tak dalej.
Pierwsze wyjście jest prosty wariant standardowego J Quine'a . Dodany
,:~
konkatenuje się w pionie, a wynikowa tablica 2D jest drukowana jako dwa rzędy tego samego łańcucha.źródło
Windows .BAT, 25
Rośnie w tempie wykładniczym.
Równoważna wersja SH tutaj .
źródło
siatkowy, 11 bajtów, niekonkurujący
Jest to standardowy szkielet quine, z tym że
1
po każdej iteracji drukowane jest dodatkowe . Wypróbuj online!Pierwsze kilka wyników:
źródło
Microscript II, 6 bajtów
Język niekonkurencyjny, datuje wyzwanie.
Pierwsza iteracja dodaje dodatek
qp
do końca, a każda kolejna iteracja dodaje dodatkową kopię tego oryginalnego programu na początku.źródło
Runiczne Zaklęcia , 6 bajtów
Wypróbuj online!
Ten był dziwny. Wszystko, co musiałem zrobić, to usunąć
~
oryginał z quine znalezionej przez Jo Kinga .Każde dodatkowe uruchomienie dołącza kolejne
<
do końca, np .:Z których nic nie robi.
źródło
EcmaScript 6 (51 bajtów):
Tworzy dłuższą wersję siebie, która może wytworzyć dłuższą wersję siebie, która może wyprodukować dłuższą wersję siebie itp. ...
źródło
PHP, 38
Dodanie średnika przy każdym uruchomieniu.
źródło
';'
. Wtedy uzyskasz dłuższe wyniki.<?=fgets(fopen(__FILE__,'r')).';';
?;<?echo fgets(fopen(__FILE__,'r'));
ECMAScript 6 (38 znaków)
Które wyjścia:
Edytować
Możesz zrobić (28 znaków):
Jednak będzie się powtarzać w nieskończoność i nigdy nie zwróci niczego ... ale można to rozwiązać robiąc coś takiego (42 znaki):
Co da wynik:
źródło
+_+ =_=
+1 dla emotikonówCommon Lisp, 16 znaków
(print `(or ,-))
To prawda, że jest interaktywny, ale możliwość odniesienia się do bieżącej formy najwyższego poziomu jest prawdopodobnie najlepszym sposobem na zminimalizowanie niebanalnego programu, który spełnia specyfikację.
To, co byłoby naprawdę interesujące, to to, co wysadza się najszybciej. Może coś takiego
(print `(progn ,@(loop repeat (length -) collect -)))
źródło
`
i,
?or
:(print -)
Julia, 66 znaków
Wyjście (134 znaków):
Wynik wykonania wyniku (268 znaków):
następny wynik (536 znaków):
Następny wynik (1072 znaków):
Mam nadzieję, że jest to zgodne z zasadami.
Daje większy wynik, a sam wynik jest poprawnym kodem źródłowym, który ponownie wytwarza większy wynik.
źródło
05AB1E, 15 bajtów, niekonkurujące
Wypróbuj online!
Odbitki
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,która drukuje
0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý
,etc.
źródło
DD
mogą być zastąpione przezÐ
.Evoloop, 9 × 9 prostokąt (81 komórek)
Evoloop automat komórkowy dołączone Golly obsługuje wzory, które replikują się w „Quine-like” sposób. W szczególności każdy z tych wzorów zawiera „program”; wzorzec odtwarza się najpierw poprzez uruchomienie programu (który tworzy „ciało” córki), a następnie przez skopiowanie programu do córki.
Powyższe dotyczy bardziej znanego automatu komórkowego „Pętle Langtona”, a także Evoloopa, ale Evoloop ma interesującą różnicę, polegającą na tym, że łatwo jest stworzyć wzór, który rośnie w każdym kolejnym pokoleniu.
( Moim zdaniem o wiele bardziej interesujący jest fakt, że Evoloop jest prostym automatem komórkowym, który zawiera wzorce, które się reprodukują i ewoluują w sposób podobny do życia! Myślę, że jedynymi znanymi automatami komórkowymi, które to robią, są Evoloop i jego potomkowie Wadą Evoloop jest jednak to, że istnieje jeden szczególny „najlepszy” genom; ewolucja zawsze ostatecznie zbiega się do tego jednego genomu.)
Obecnie istnieją dwa niedociągnięcia w tym oświadczeniu. Jednym z nich jest to, że nie jest jasne, jakie jest „wyjście” automatu komórkowego. Myślę jednak, że automat do reprodukcji jest „wystarczająco blisko”, by być quine; to z pewnością nie mniej interesujące! Inną wadą jest to, że wzorce te nie tworzą po prostu jednej kopii; każda kopia oryginalnego wzoru próbuje stworzyć nieskończenie wiele swoich kopii, które ostatecznie oddziaływują ze sobą w destrukcyjny sposób. Myślę, że spełniłem wymagania tego wyzwania w duchu, ale nie w piśmie.
Bez zbędnych ceregieli wzór jest następujący:
Oto ponownie wzór w formacie, który można skopiować i wkleić w Golly:
Okej, ale jak to wygląda? To wygląda tak:
Na powyższej animacji możesz zobaczyć, jak początkowy wzór tworzy większą córkę, która tworzy większą wnuczkę, następnie większą prawnuczkę, a na koniec jeszcze większą pra-prawnuczkę, która zaczyna budować jeszcze większą trzecią-pra- wnuczka. Gdybyś używał tego schematu przez długi czas, trwałby tak w nieskończoność (a może w końcu zostałyby wyprzedzone przez ewolucyjne organizmy, które są w stanie rozmnażać się znacznie szybciej; nie jestem pewien).
źródło
SERIA, 26
Umieść ten kod w dowolnym pliku .bat, a on będzie nadal działał (w nieskończonej pętli), a plik również się powiększy.
źródło
%0
to polecenie użyte do wywołania skryptu, który może nie mieć.BAT
rozszerzenia. Możesz użyć,%~nx0
aby uzyskać pełną nazwę pliku wsadowego..bat
go wykonywać. Jeśli nazwa pliku jestexecute.bat
, można wprowadzić alboexecute
alboexecute.bat
. Oba będą działać..bat
rozszerzenie do wykonania, ale można zostawić rozszerzenie się podczas wykonywania go (po wpisaniu polecenia bez rozszerzenia, Windows próbuje.com
,.exe
, a następnie.bat
w tej kolejności). Jeśli nazwa pliku tohello.bat
, to>> %0
zapisze plik o nazwiehello
, który nie jest oryginalnyhello.bat
(i nie można go wykonać).PYG (6)
Drukuje własny kod źródłowy, oddzielony znakami nowej linii. Drugie pokolenie byłoby
i tak dalej.
źródło
OLEJ , 83 bajty
Najpierw drukuje dwie linie z zerami, a następnie porównuje każdą linię z linią 1, jeśli są one równe (co ma miejsce w przypadku wyczerpania pliku), wypisujemy to, co jest w komórce 26. Wynikowy wynik będzie wyglądał to samo, z wyjątkiem dodanego
33
, który nic nie robi. Następnym razem zostanie dodana kolejna linia i tak dalej.źródło
Pomoc, WarDoq! , 1 bajt.
Wydruki
Hello, World!
.Inne znaki niż H są poprawnym (i bezpiecznym) kodem źródłowym (który wypisuje inne warianty Hello World).
źródło