Program A generuje kod programu B po uruchomieniu, a B generuje źródło A.
Wymagania:
- Tylko jeden język w obu programach
- Programy są różne. Jeden program, który sam się wyświetla, nie kwalifikuje się.
- Oba programy są niepuste lub mają co najmniej 1 bajt długości. Końcowe znaki nowego wiersza zarówno źródłowego, jak i wyjściowego są ignorowane
standardowe jest zamknięte.Nie czytaj niczego (więc nie możesz odczytać źródła i manipulować nim). Wyjście przechodzi na standardowe wyjście.
Edycja: stdin jest podłączony/dev/null
. Możesz zamówić zamknięcie, jeśli zostanie to wyjaśnione.- Nie używaj
random
funkcji.
Dodatkowy:
- Podaj wyjaśnienia, jeśli to możliwe
Wynik to całkowita długość . Końcowy znak nowej linii nie jest liczony, jeśli nie wpływa na program.
Odpowiedzi:
CJam , 13 + 13 = 26 bajtów
Wypróbuj online!
Wyjścia
Wyjaśnienie
Ponieważ
e\
jest przemienne w drugim i trzecim argumencie, drugi program robi dokładnie to samo, zamianaZ
iY
z powrotem do ich oryginalnej kolejności.źródło
CJam ,
11 + 13 = 2411 + 12 = 23 bajtyWypróbuj online!
Wyjścia:
Dane wyjściowe mają 13 bajtów, ale:
Więc zmieniłem przestrzeń na nową linię, aby z tego skorzystać.
Opiera się na najkrótszym odpowiednim quinie CJam:
I
N^
jest xor ciągu z nową linią, która dodaje nową linię, jeśli nie ma nowej linii, i usuwa ją, jeśli istnieje, dla łańcucha, że każdy znak jest unikalny.Myślę, że widziałem ten quine w pytaniu quine, ale nie mogłem go znaleźć.
źródło
RProgN 2 , 3 + 3 = 6 bajtów
Pierwszy program:
Wypróbuj online!
Drugi program:
Wypróbuj online!
-2 dzięki Martinowi Enderowi .
źródło
C, 95 + 95 = 190 bajtów
Dzięki @immibis za oszczędność 16 * 2 bajtów!
Wypróbuj online!
Wyjścia:
Wypróbuj online!
Które wyjścia:
źródło
JavaScript, 67 + 67 = 134 bajtów
1. program:
2. program:
Jest to oparte na odpowiedzi Hermana Lauensteina na Tri-interquine
JavaScript (nieprawidłowy odczyt kodu źródłowego),
75 + 75 = 15061 + 61 = 12258 + 58 = 11650 + 50 = 100 bajtówzapisano 20 bajtów dzięki Tushar, 6 bajtów dzięki Craig Ayre i zapisano 16 bajtów dzięki kamoroso94
1. program:
2. program:
Zamienia cyfry 1 na 0 i odwrotnie. Obaj robią to samo, po prostu wytwarzając różne dane wyjściowe ze względu na kod źródłowy.
źródło
f.toString()
=>(''+f)
,(0|1)
=>0|1
,(a,b)
=>a
powodującf=()=>("f="+(''+f).replace(/0|1/g,a=>a==0?1:0)+";f()");f()
f=_=>
i usunąć pareny z oddzwaniania zastępującego, jak sugerował @Tushar:a=>+!+a
"f="+(f+"")
z("f="+f)
do -3 bajtów./0|1/g
i/1|0/g
z0
i1
odpowiednio -5 bajtów.f=_=>alert(("f="+f).replace(0,a=>+!+a)+";f()");f()
.Python 2, 63 + 63 = 126 bajtów
Wypróbuj online
Pierwszy program:
wyjścia:
Drugi program:
Wyjścia:
źródło
JavaScript ( JsShell ), 35 + 34 = 69 bajtów
1:
2:
źródło
Mathematica, 43 + 44 = 87 bajtów
i
źródło
-1
na końcu, a nie-1 1
.asmutils sh, 16 + 16 bajtów, nadużywanie reguły „stdin is closed”.
Ponieważ stdin jest zamknięte i sh otworzy swój skrypt do pierwszego dostępnego uchwytu (zamiast przenosić go do uchwytu o wysokim numerze, jak to robią współczesne powłoki), tr kończy czytanie kopii skryptu bez jego otwierania.
Ta interquine jest zdolna do obciążenia, ale wstawienie ładunku jest trudne.
Ponadto, ta oryginalna wersja narusza jakiś szalony błąd w starożytnym jądrze, którego używałem w tamtych czasach. (Nie wiem, co jest grane z tym jądrem - później dowiedziałem się, że ma także inne numery główne i drugorzędne dla urządzeń.) Jeśli naprawisz zmiany ABI, które złamały asmutils, to interquine nadal nie będzie działać. Zapominam, czy asmutils sh ma exec, czy nie, ale jeśli tak, to jest to nowoczesna wersja:
To nadużywa celowego błędu w asmutils dd; ma optymalizację wydajności, która wywołuje llseek dla pominięcia, jeśli to możliwe, ale aby zapisać bajt, przekazuje SEEK_SET zamiast SEEK_CUR. Powoduje to śmieci na stderr, ale interquine na stdout. Asmutils dd nie ma opcji tłumienia spamu stderr.
źródło
/dev/null
zamiast tego zostanie podłączone standardowe wejście ? W każdym razie dobra robota!#!/bin/sh
?Niedociążenie , 32 + 32 = 64 bajty
Wypróbuj online!
Wypróbuj online!
źródło
Common Lisp, 58 znaków
... lub 24 znaki, jeśli nie masz nic przeciwko zakładaniu
*print-circle*
globalnie jest ustawione naT
:Wydrukowana reprezentacja kodu jest odczytywana jako struktura cykliczna, gdzie
#1#
wskazuje na następną komórkę przeciw#1=
. Przytaczamy programy, aby nie były wykonywane. Ponieważ*print-circle*
jest to T, REPL stara się emitować takie zmienne czytnika podczas drukowania; oto, co drukuje powyższy kod i zwraca:Kiedy oceniamy powyższy kod, drukuje:
Jeśli chcesz pozostać przy wartości domyślnej dla
*print-circle*
NIL w implementacji zgodnej, musisz tymczasowo ponownie powiązać zmienną:W treści LET drukujemy różne rzeczy
*print-circle*
jako T. Więc otrzymujemy:Jak widać, nowy program nie łączy się ponownie
*print-circle*
, ale ponieważ używamywrite
, czyli wywoływanej funkcji niskiego poziomuprint
, możemy przekazać dodatkowe argumenty, takie jak:circle
. Kod działa wtedy zgodnie z oczekiwaniami:Jednak trzeba wykonać powyższe programy jako skrypt, a nie wewnątrz REPL, ponieważ nawet jeśli wydrukować rzeczy dbając kolistych struktur, zarówno
write
aprint
także zwraca wartość drukowanego; i w domyślnej REPL wartość jest również drukowana, ale poza kontekstem dynamicznym, gdzie*print-circle*
jest T.źródło
> <> , 16 + 16 = 32 bajty
i
Wypróbuj online!
Działa to poprzez użycie skoku w programie, pierwszy skok programu pominie odwrócenie stosu (jeśli odwróci stos, będzie to quine). Drugi program nie przeskakuje do tyłu, ale był już odwrócony przez przepływ programu, wówczas utworzy oryginał.
Ten kod zakończy się błędem.
źródło
RProgN 2 , 7 + 7 = 14 bajtów
Chciałem spróbować pokazać lepsze wykorzystanie RProgN, a nie tylko nadużywanie zamówień drukowania ...
i...
Wyjaśnił
Ponieważ powoduje to wydrukowanie stosu do góry nogami, najpierw drukowana jest nowa stała, a następnie drukowana jest strunkowa wersja funkcji.
Wypróbuj online!
źródło
LOGO , 65 + 66 = 131 bajtów
i
źródło
Python 3, 74 + 74 = 148 bajtów
i
też tego nie rozumiemźródło
> <> , 12 + 12 = 24 bajty
i
Wypróbuj online!
Oba programy używają literału zawijania, aby dodać kod do stosu, a następnie wygenerować
'
polecenie za pomocą różnych metod. Podczas drukowania stosu wypycha kod do tyłu, jednak'
pozostaje z przodu. Istnieje kilka odmian, które powodują'
;3d*
,d3*
,00g
,:c-
Gdy w połączeniu z3d*
, a:9-
gdy w połączeniu z00g
.Zbyt podobne rozwiązanie do opublikowania, w Befunge-98 dla 13 * 2 bajtów
źródło
Stax , 18 + 20 = 38 bajtów
Uruchom i debuguj online!
Uruchom i debuguj online!
Wyjaśnienie
Dodano dla kompletności. Port odpowiedzi CJam @ jimmy23013. Przełącza nowe linie za pomocą set xor.
źródło
JavaScript (ES6), 36 + 36 = 72 bajty
Program 1:
Program 2:
Programy te działają poprzez sklonowanie się i wymienić
5
z4
oraz4
z5
źródło
Klein ,
2624 bajtówWypróbuj online!
Wyjaśnienie
Działa to tak samo, jak moja Klein Quine , gdzie wypisuje źródło wstecz, a następnie a
"
, ostatni uniknął tego, ponieważ jest palindromiczny, więc wszystko, co musimy zrobić, to uczynić go niepalindromicznym bez szkody dla jego funkcjonalności. Przełączając<
i:
byliśmy w stanie to zrobić bez ingerencji z funkcjonalnością.źródło
Pari / GP , 36 + 36 = 72 bajty
Wypróbuj online!
Wypróbuj online!
źródło