Pojęcie
Napisz program, który wypisuje kod w swoim języku programowania. Wykonany kod musi wygenerować oryginalny program.
Zasady
- Ponieważ jest to oszustwo, możesz przeczytać oryginalny kod źródłowy.
- Pierwszy program wyjściowy musi być w tym samym języku, co program oryginalny.
- Nie możesz wyprowadzać zwykłego quine. Te dwa programy muszą być różne.
- Obowiązują standardowe luki.
- To jest golf golfowy, więc najkrótsza odpowiedź wygrywa, jednak nie zostanie wybrana.
Odpowiedzi:
Bash + coreutils, 11 bajtów
To drukuje
Wypróbuj online!
To z kolei drukuje
źródło
tr
polecenie jest przekierowywane na$0
własny kod źródłowy. To jest „oszukiwane”.Ślimaki, 0 bajtów
Drugi program to
Pierwszy program zlicza liczbę dopasowań pustego wzorca na pustym wejściu (który tak naprawdę ma obszar 0, ale wzorzec jest zawsze uruchamiany przynajmniej raz jako hack, aby umożliwić programom decydowanie, co chcą wydrukować na pustym wejściu). Drugi program zaczyna się od kwantyfikatora (jak
{1}
w wyrażeniu regularnym), co powoduje błąd analizy. Ponieważ program nie analizuje się pomyślnie, STDOUT jest pustym ciągiem.źródło
7 , 2 bajty
7 używa 3-bitowego zestawu znaków, ale pobiera dane wejściowe spakowane w bajtach (i zgodnie z meta, języki z podtaktowymi zestawami znaków są liczone za pomocą bajtów pliku na dysku ). Oto
xxd
zrzut programu:Podając ten plik do interpretera 7, wyświetli następujący program:
który z kolei ponownie wyświetli oryginalny program.
Co się tu dzieje? Nie ma potrzeby czytania źródła (tak naprawdę nie sądzę, że można odczytać źródło w 7), chociaż program prawdopodobnie oszukuje w inny sposób; Powiedz mi co myślisz. Oto jak działa program. (Zauważ, że każde 7 poleceń ma dwa warianty, z których niektóre nie mają nazw i nie mogą pojawić się w oryginalnym programie. W sumie jest 12 poleceń w sześciu parach. Używam pogrubienia dla poleceń aktywnych, niepogrubionego dla pasywnego polecenia, a w przypadkach, gdy aktywne polecenie nie ma nazwy, nadaję mu taką samą nazwę jak odpowiadające mu polecenie pasywne i polegam na pogrubieniu, aby je rozróżnić. W przypadku, gdy oba są nazwane, np.
7
który jest aktywnym wariantem1
, każde polecenie otrzymuje własną nazwę, a pogrubienie to tylko wyróżnianie składni).W tym momencie 7 interpreter widzi, że góra stosu zawiera polecenia (
2
i3
), które nie są reprezentowalne, więc ucieka z góry stosu, tworząc723
(co jest). Pierwsze wyjście polecenia wybiera format wyjściowy; w tym przypadku jest to format 7, „formatuj dane wyjściowe w taki sam sposób jak program”. Tak więc polecenia są pakowane w bajty. Następnie program kontynuuje:W tym momencie na stosie nie ma nic oprócz pustych elementów stosu, więc program kończy pracę. Wyprowadzamy
23
wcześniej. Jeśli uciekniemy237
(i musimy, ponieważ zawiera niereprezentatywne polecenia), otrzymamy7231
. To pobiera dane wyjściowe bezpośrednio, tworząc ostateczne dane wyjściowe programu237231
(sformatowane w taki sam sposób jak program, tj. Spakowane w bajty). To4fa67f
. (Można zauważyć, że1
było to całkowicie bezcelowe pod względem wpływu na wynik; jedynym powodem jest to, że oba programy różnią się.)Bieganie
237231
przebiega prawie dokładnie w ten sam sposób; różnica polega na tym, że bezużyteczne1
uruchamia się zaraz po pierwszym wydruku (a pusty element jest domyślnie usuwany przy drugim osiągnięciu bieżącego końca programu). Ponownie, w231
końcu sam się wyprowadza, w23
końcu sam się wyprowadza poprzedzony7
, i otrzymujemy231723
, oryginalny program.Spostrzegawczy może zauważyć, że oba programy, mimo że mają tę samą długość w „natywnej” ósemce języka, mają różne długości na dysku. Jest tak, ponieważ program 7 można uzupełnić dowolną liczbą 1 bitów, a spakowany format odrzuca dopełnianie końcowe. Oto jak odbywa się kodowanie:
Innymi słowy, dwa bajty
4C
F4
wystarczają do przedstawienia programu, więc to wszystko, czego użyłem.źródło
Python 3,
297279251243225218208180126111 bajtówNieuczciwość:
To drukuje:
który po uruchomieniu drukuje oryginalny program.
źródło
Partia, 14 bajtów
Które gdy działają jako
cyclicquine.bat
wyjściaKtóre po uruchomieniu wyświetla oryginalny plik wsadowy.
źródło
RProgN , 4 bajty.
Społeczność wydaje się uważać tego rodzaju za oszustwo , które spełnia kryteria.
Z końcowym znakiem nowej linii.
To drukuje
Z końcowym znakiem nowej linii, który drukuje pierwszy kod.
RProgN drukuje stosy, więc od góry do dołu.
Wypróbuj online!
źródło
1\n1\n
Jakiś czas temu odbyła się rozmowa na czacie, która sugerowała, że w RProgN będzie nieuczciwym quine, ponieważ każda z nich drukuje się nawzajem (i byłoby to uważane za oszustwo, gdyby każda drukowała się sama). Wszystko to naprawdę implikuje to, że czasami oszukiwanie w quinach może być trudne. (Jednak ta odpowiedź jest poprawna w obu przypadkach, ponieważ pytanie tak naprawdę nie wymaga oszukiwania, po prostu pozwala .)1\n
jest technicznie poprawny quine, ponieważ1
nie jest stałą, ale wywołaniem funkcji, która wypycha1
na stos.Jolf, 6 bajtów
Po uruchomieniu powoduje to:
Co z kolei daje wynik
1q_a_q
.Wypróbuj tutaj!
Wyjaśnienie
źródło
JavaScript (ES6),
696059 bajtówWyjścia:
-1 bajt (@ETHProductions): użyj 0 w wyrażeniu regularnym zamiast \ d
źródło
n=>1-n
zamiastn=>+!+n
.1
skończy się na regexie.Bash + Sed, 15 bajtów
Ten sam pomysł, co odpowiedź Dennisa .
źródło
Bash,
Cati Rev,1916 bajtów-3 dzięki @izabera
źródło
Bash
,Tac
i `Rev?rev $0 # 0$<space><space>ver
z jakiegoś powodu nie mogę wstawić dwóch spacji w komentarzutac
rev
-ed jestcat
.> <>, 16 bajtów
Wypróbuj tutaj!
Wyjścia
To jest modyfikacja tej podanej tutaj . Nie jestem pewien, czy to oszustwo, czyta codbox i wysyła go.
źródło