Zrób Quine.
Wydaje się łatwe, prawda? Cóż, ta quine musi wypisać samą siebie i swój pierwszy znak, a następnie wypuścić siebie i swój drugi znak, i tak dalej.
W ten sposób quine powinno w ciągu kilku generacji generować dwie kopie.
Przykład: pozwala na kod x
. Uruchomienie powinno dać wynik x + x[:1]
. Uruchomienie wynikowego programu powinno zostać wyprowadzone x + x[:2]
i tak dalej ...
Jeśli twój kod był foobar
, uruchomienie powinno dać wynik foobarf
. Uruchomienie tego powinno dać wynik foobarfo
. I tak dalej i tak dalej zgodnie z tym wzorem:
foobar
foobarf
foobarfo
foobarfoo
foobarfoob
foobarfooba
foobarfoobar
foobarfoobarf
Twój program musi być dłuższy niż 2 bajty i musi wypisywać tylko JEDEN dodatkowy znak własnego kodu w każdej iteracji.
Odpowiedzi:
Zsh ,
110108100 bajtówWypróbuj online!
To jest możliwe.
Wyjaśnienie
źródło
R, 289 bajtów
kredyt do tej Quine'a inspiracji. Działa tylko, jeśli działa w tym samym środowisku R, co poprzednia quine.
źródło
cat
dodając nowe linie.main
R. nie ma żadnej innej obowiązkowej struktury takiej jak ta. Poza tym pytanie wyraźnie nie wymaga pełnego programu, więc spełniałaby to funkcja lub podobne.Alice , 29 bajtów
Wypróbuj online!
Znak niedrukowalny to 0x18.
Wyjaśnienie
Problem ze zwykłymi
"
quinesami Fungeoid polega na tym, że jeśli powtórzymy cały kod źródłowy, otrzymamy również dodatkowy,"
a ciąg nie będzie już obejmował całego kodu źródłowego. Zakładam, że dlatego w istniejącej odpowiedzi zastosowanog
podejście cheat-y .Ta odpowiedź korzysta z
"
podejścia opartego na zasadach, ale zamiast dołączać a"
do źródła, piszemy ją do programu w czasie wykonywania. W ten sposób będzie tylko jeden,"
niezależnie od tego, jak często program się powtarza (ponieważ zapisujemy go tylko do jednej określonej współrzędnej, niezależnie od wielkości programu).Ogólna idea polega na tym, że tworzymy reprezentację całego kodu źródłowego na stosie, ale cyklicznie przechodzimy przez pierwsze 29 znaków (tj. Długość programu), przy czym długość pętli zależy od wielkości kodu. Dlatego możemy faktycznie dodawać dowolne znaki (z wyjątkiem linii) po,
@
a wynikiem będzie zawsze cykliczne powtarzanie programu podstawowego, jeden znak dłuższy niż źródło.źródło
Perl 5 , 83 bajtów (w tym końcowy nowy wiersz)
Wypróbuj online!
Dobry ol '
__DATA__
token ułatwia dołączenie dowolnego ciągu znaków do dowolnego programu w Perlu, do którego program główny może uzyskać dostęp za pośrednictwem<DATA>
uchwytu pliku (i faktycznie używa tego__END__
, co robi to samo dla kompatybilności wstecznej, zamiast__DATA__
oszczędzać dwa dodatkowe bajty) .Zauważ, że ten program nie odczytuje własnego kodu źródłowego, a jedynie dodatkowe dane wejściowe dołączane do źródła po
__END__
tokenie. W efekcie__END__
token i wszystko po nim działa jak literał łańcuchowy zakończony na końcu danych wejściowych.Należy również pamiętać, że aby dokładnie spełnić specyfikację, ten program musi kończyć się nową linią. Jeśli nie, nowa linia i tak jest automatycznie dodawana po drugim
__END__
, ale wtedy wynik pierwszej iteracji nie będzie już dokładnie równy kodowi plus jego pierwszy bajt.źródło
Befunge-98 , 30 bajtów
Wypróbuj online!
Moja próba użycia Befunge-98, która używa spinu zakończonego spacją, który również liczy, ile znaków zostało wyprowadzonych. Używa jednak
g
polecenia.źródło
PHP, 146 bajtów
Powinien być uruchamiany za pomocą
-r
wiersza poleceń.źródło
php -r 'command'
.Runiczne Zaklęcia , 61 bajtów
Wypróbuj online!
Stosuje podobne podejście jak odpowiedź Alice: refleksyjnie zapisuje
"
komendę łańcuchową w kodzie, aby istniała tylko jedna. Pozostaje wiele operacji na łańcuchach i stosach, aby odzyskać oryginalny program, ile dodatkowych bajtów jest potrzebnych i wydrukować niezbędne porcje.}͍
Sekwencja obraca reprezentację w pamięci ciąg wokół tak, że803X4+kw
pojawia się na początku zamiast na końcu, z powodu położenia punktu"
i nie ma łatwiejszy sposób obsługi tej operacji bez konieczności obliczyć wiele liczb niewygodnych .Podczas gdy oryginalny program ma 61 bajtów, jego długość łańcucha wynosi tylko 50, co jest łatwe do skonstruowania,
5X
a zbiegiem okoliczności nie trzeba było go uzupełniać po wprowadzeniu wszystkich niezbędnych funkcji (np. Program o długości 49 byłby łatwiejszy aby zakodować jak50
z jednym bajtem dopełniania, niż zakodować literał49
, podczas gdy51
byłby zakodowany jako5X3+
lub 53, z uwzględnieniem własnych dodatkowych bajtów).źródło