Napisz program (lub funkcję) (nazwijmy go P1), który po uruchomieniu wyświetla inny program P2 tego samego języka i dokładnie 1 bajt dłuższy niż P1.
Program P2 po uruchomieniu powinien wypisać trzeci program P3, który jest o 1 bajt dłuższy niż P2. P3 musi wygenerować program P4, który jest o jeden bajt dłuższy niż P3 itp. To samo dla P5, P6, ..., P∞.
Łańcuch programu powinien iść w nieskończoność lub do miejsca, w którym tłumacz nie jest już w stanie obsłużyć (ale musi pozostać jako teoretycznie poprawny program w języku)
Zasady
- Standardowe luki zabronione
- Wszystkie programy w łańcuchu powinny być w jednym języku
- Nie podano danych wejściowych. Wyjście przechodzi do wartości standardowej lub zwracanej przez funkcję
- Program musi zakończyć się po pewnym czasie. Program, który przestaje generować dane wyjściowe po określonym czasie, ale nigdy się nie kończy, nie kwalifikuje się
Najkrótszy program P1 w bajtach w każdym języku wygrywa!
"puts <<2*2,2\nputs <<2*2,2\n\n2"
rośnie o 2 przy każdej iteracji w Ruby. Nie mogłem znaleźć nic lepszego. : - /. Ciekawe wyzwanie!Odpowiedzi:
JavaScript (ES6),
1412 bajtów-2 bajty dzięki @Shaggy
Testowanie fragmentu kodu
Pokaż fragment kodu
źródło
"f=_"
dodatkowy_
przed nazwą parametru, co powoduje, że zwiększa się on z każdą iteracją.7 , 4 bajty ASCII
Wypróbuj online!
Wiem, że 7 nie jest zwykle kodowane w ASCII, ale tym razem jest to wygodniejsze kodowanie, dlatego dodajemy 1 bajt z każdym uruchomieniem, a nie 3 bity.
Nie jestem również pewien, czy liczy się to jako oszustwo, czy nie. (Zwykle nie jest jasne, czy siódemka jest oszustem, ponieważ przecina granicę na wiele sposobów.) Możesz zrobić porządny argument, że
0
koduje6
, ale ogólnie nie jest jasne, skąd pochodzą uzyskane znaki w 7, ponieważ ma tak wiele dziwacznych, ukrytych zachowań.Ten program drukuje się z
1
dołączonym i zrobi to, nawet jeśli dodasz do niego kilka1
s. Oto skomentowany ślad debugowania160311
:(W programie nie ma już nic
|
, więce
natychmiast wyjdzie z programu jako efekt uboczny, co oznacza, że finał7
nigdy się nie uruchomi).Podstawowe zamieszanie wokół tego, skąd pochodzą wszystkie znaki, polega na tym, że większość poleceń w 7 po prostu generuje dane po uruchomieniu, a następnie
6
próbuje odtworzyć sekwencję poleceń, które wytworzyłyby dany fragment danych; często kończy się to na oryginale, ale nie identycznym. (Do celów quiningowych zwykle piszesz program 7 w taki sposób, że wynik będzie prawie taki sam, zwykle różniący się początkowymi lub końcowymi7
s.) Tak więc na przykład1
dane stają się716
, co jest najłatwiejszym sposobem na dołączenie1
do bieżącego ciągu danych. Pierwotnie stworzyliśmy go z16
inną (ale podobną) sekwencją znaków, niszcząc destrukcyjnie jedną z nich|
znaczniki, od których zaczęły się dane. (Wydaje mi się, że najlepszym argumentem, że nie jest to dosłowny quine, jest to, że wynik różni się od danych wejściowych!)źródło
Haskell ,
7466 bajtówEDYTOWAĆ:
<>
, a następnie -6, przesuwając(10*)<$>
.Teraz używa nowego, bezpłatnego
<>
operatora (Semigroup
mnożenie, wymaga GHC 8.4 do pracy bez importu).Wypróbuj online! (Kody z importem, ponieważ TIO nie ma jeszcze GHC 8.4).
Jak to działa
main=putStr$
jest płytą kotłową, która wyświetla następującą wartość ciągu.fst<>show
jest funkcją, która pobiera krotkę i zwraca ciąg znaków składający się z pierwszego elementu krotki połączonej z reprezentacją ciągu krotki. To znaczy(10*)<$>
mnoży ostatni element następnej krotki przez 10, dodając cyfrę0
do jego reprezentacji ciągu.źródło
(<>)
(10*)<$>
.C (gcc) ,
134132 bajtyNieznaczna przeróbka kanonicznej litery C. Strasznie długo.
Wypróbuj online!
źródło
Rozszczepienie 2 , 7 bajtów
Wypróbuj online!
Standardowa Quine rozszczepienia , ale z dodatkową,
!
która wypisuje dodatkowe 0x01 na początku kodu na każdej iteracji.źródło
Pari / GP , 35 bajtów
Wypróbuj online!
źródło
Python 2 , 38 bajtów
Wypróbuj online!
źródło
pieprzenie mózgu , 420 bajtów
Wypróbuj online!
Jest to modyfikacja „standardowej” Quine BrainFuck , za pomocą
.
.
każdą dodatkową iterację.Quine sama koduje znaki Brainfuck jako stos cyfr szesnastkowych: konkretnie cyfry szesnastkowe
c-0x2b
, które dogodnie są następujące:Kodowanie obejmuje dwa fragmenty kodu:
>++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++
przesuwa kodowanie samego kodowania,[[<++++++++++++++++>-]<+++++++++.<]
przechodzi stos i drukuje wszystko.źródło
Brudny , 9 bajtów
Wypróbuj online!
Jeśli odczyt kodu źródłowego jest dozwolony:
Brudny , 8 bajtów
Wypróbuj online!
Wyjaśniono:
Może być ważny:
Brudny , 4 bajty
Wypróbuj online!
Drukuje kod źródłowy z końcowym znakiem nowej linii.
(I kilka spacji z powodu błędu. Działa to jednak bez nich.)
Pamiętaj, że działa tylko w natywnym zestawie znaków, a nie podczas korzystania z interfejsu użytkownika UTF8 - więc aby wypróbować go w TIO, musisz zastąpić znak, który wypisuje między
[]
s‼
, który jest odpowiednikiem UTF8 dla tego, co drukuje .źródło
Java 8,
162146 bajtówWypróbuj online.
Wypróbuj pierwszy program wyjściowy ; Wypróbuj drugi program wyjściowy ; Wypróbuj trzeci program wyjściowy .
Wyjaśnienie:
quine -part:
String s
Zawiera kod źródłowy niesformatowany.%s
służy do wprowadzania tego ciągu do siebie za pomocąs.format(...)
.%c
,%1$c
i34
służą do formatowania podwójnych cudzysłowów.s.format(s,34,s)
łączy to wszystko razemCzęść wyzwania:
+1
dodaje 1 zarówno do niesformatowanego, jak i sformatowanego programu..replaceAll("1+$","");}
: Ponieważ chcemy zwiększyć liczbę bajtów w programie tylko o jeden zamiast dwóch, usuwamy wszystkie końcowe 1 przed powrotem.źródło
> <> , 9 bajtów
Wypróbuj online!
Wariacja na temat klasycznej> <> quine, która po prostu dodaje kolejne polecenie dupe, aby skopiować
#
przód.źródło
Perl 5 , 32 bajty
Wypróbuj online!
źródło
GolfScript , 9 bajtów
Wypróbuj online!
CJam , 9 bajtów
Wypróbuj online!
Oba te rozwiązania zamieszczam w tej samej odpowiedzi, ponieważ są to tylko trywialne odmiany i działają dokładnie w ten sam sposób. Oba są oparte na typowym quinie GolfScript
{'.~'}.~
(lub{"_~"}_~
w CJam), który jest opisany bardziej szczegółowo np . W mojej poprzedniej odpowiedzi.Jedyną różnicą jest to, że ten wariant dołącza
1
bajt na końcu danych wyjściowych. Tak się składa, że dowolny ciąg1
s (lub dowolny literał całkowity bez wiodących zer) sam w sobie jest trywialnym quine zarówno w GolfScript, jak i CJam, więc wszystkie już obecne na końcu powyższego kodu zostaną po prostu skopiowane dosłownie na wyjście. Ponieważ GolfScript (i CJam) używają liczb całkowitych o dowolnej długości, będzie to działać dla dowolnie długich programów, przynajmniej tak długo, jak długo komputer z uruchomionym kodem ma wystarczającą ilość pamięci, aby go zapisać.źródło
Attache ,
767261 bajtówWypróbuj online!
Standardowy quine, który dodaje spację na końcu
x
po każdej iteracji.Kilka pierwszych iteracji:
itp.
Attache, 72 bajty
Wypróbuj online!
Jest to po prostu odmiana standardowego formatu quine ze zmienną
y
ustawioną na10*y
po każdej iteracjiKilka pierwszych iteracji:
itp.
źródło
Swift 4 , 89 bajtów
Zawiera końcowy znak nowej linii
Wypróbuj online!
źródło
Haskell , 88 bajtów
Wypróbuj online! Rośnie, przechodząc
#
do ciągu danych.źródło
show
coś więcej niż tylko ciąg i używając dopasowania wzorca. Wypróbuj online!Stax ,
2018 bajtówUruchom i debuguj
Generuje dodatkową spację przed drugim znakiem cudzysłowu podczas każdej iteracji.
Wyjaśnienie
Używa programu
"34s+cTZL "34s+cTZL
do wyjaśnienia.źródło
Jstx , 4 bajty
Wypróbuj online!
źródło
Runiczne Zaklęcia , 6 bajtów
Wypróbuj online!
Bezpośrednia kopia tej odpowiedzi na powiązane wyzwanie. Tak się złożyło, że powiększała się już o 1 bajt przy każdej iteracji (silnym argumentem za tym wyzwaniem jest duplikat tego lub odwrotnie).
źródło
Galaretka , 11 bajtów
Wypróbuj online!
źródło
Cud , 33 bajty
Interesujący wariant normalnego quine, który dodaje 1 po każdej iteracji.
Postęp:
Wyjaśnienie
Jedną z interesujących części tego quine jest to, że Wonder może działać z dowolną precyzją, więc postęp nie ulegnie zerwaniu po określonej liczbie.
źródło
ColdFusion, 277 bajtów
Jest to trywialna modyfikacja mojej wersji ColdFusion, która dodaje nową linię za każdym razem, gdy jest wywoływana.
Testowane lokalnie na lucee-express-5.2.6.60
źródło
Pakiet Windows,
3836 bajtówTen kod tworzy plik o nazwie „q” zawierający literę „q”, a następnie dołącza go do oryginalnego pliku. Zauważ, że „::” to alias dla „rem”, który nie wymaga dodatkowego miejsca.
Zaoszczędzono 2 bajty dzięki user3493001.
źródło
Gol> <> , 7 bajtów
Wypróbuj online! Wypróbuj online !! Wypróbuj online !!!
Jest to prosta odmiana zwykłego quinu Gol> <>, ale dodaje kopię
H
każdego uruchomienia. PonieważH
polecenie zatrzymuje program, dodatkoweH
na końcu nie zmienia zachowania.źródło
T-SQL , 175 bajtów
Najpierw napisałem quine SQL, a następnie zmodyfikowałem go, aby dodać dodatkowe miejsce (nieco zainspirowane tą odpowiedzią ).
źródło
Befunge-98 (PyFunge) ,
2219 bajtówWypróbuj online!
Dodaje <przed ostatnim „każdym pokoleniem.
źródło
C # (interaktywny kompilator Visual C #) , 89 bajtów
Zainspirowany odpowiedzią Kevina Cruijssena.
Wypróbuj online!
źródło