W czasie mojej pracy nad PPCG zauważyłem, że problemy z quine i polyglot są dość popularne. Również meta-rozwiązania problemów, czyli skrypty, które generują program będący rozwiązaniem problemu, zwykle uzyskują wiele pozytywnych opinii od społeczności. Dlatego stworzyłem to wyzwanie, które realizuje te trzy pomysły.
Twoim zadaniem, czytelnika i pasjonata golfa , jest stworzenie możliwie najkrótszego skryptu, który może działać w dwóch językach A i B, aby wygenerować quiny dla A i B. Gdy twój program działa w języku A, powinien wygenerować program, który jest quine w języku B, ale nie w języku A i odwrotnie. Języki A i B mogą być różnymi wersjami tego samego języka, pod warunkiem, że pamiętasz, że wygenerowane quiny powinny działać tylko w jednej z wersji.
Należy pamiętać, że standardowe luki należy uważać za zamknięte i dozwolone są tylko odpowiednie quinesy .
Powodzenia, najmniej znaków wygrywa!
Odpowiedzi:
CJam 0.6.6 dev / GolfScript,
151412 bajtówDzięki @ jimmy23013 za grę w golfa z 2 bajtów!
Reszta do aktualizacji.
Weryfikacja
Ponieważ przesyłanie obejmuje znaczną spację, najlepiej porównać zrzuty szesnastkowe.
CJam
Odbitki CJam
"`0$~"0$~
i końcowe podawanie linii. Wypróbuj online!Wygenerowany program drukuje
"`0$~"0$~
z końcowym wysuwem wiersza w GolfScript ( Wypróbuj online! ), Ale bez wysuwu liniowego w CJam ( Wypróbuj online! ).Jak działa metakina
Jak działa quine
W przeciwieństwie do GolfScript, CJam domyślnie nie drukuje końcowego przesuwu linii, więc nie jest to żadna quine w CJam.
GolfScript
Wydruki GolfScript
"`0$~"0$~
, bez spacji. Wypróbuj online!Wygenerowany program drukuje
"`0$~"0$~
bez spacji w CJam ( Wypróbuj online! ), Ale GolfScript dołącza wiersz ( Wypróbuj online! ).Jak działa metakina
Jak działa quine
W przeciwieństwie do CJam, GolfScript dołączy linię do zawartości stosu, więc nie jest to quine w GolfScript.
źródło
"0$p"0$~a:n;
.a:n
, ale używaniep
nie przyszło mi do głowy.CJam / Rozszczepienie, 22 bajty
Wypróbuj w CJam. Wypróbuj w Fission.
W CJam wyświetla standardowy quine Fission :
Wypróbuj quinę Fission.
W
"
Fission wypisuje bez-wariantową wersję standardowej Quine CJam:Spróbuj quine CJam.
Działa to również dla 22 bajtów (drukowanie tych samych quinesów):
Wyjaśnienie
W CJam:
Tak więc na końcu programu stos zawiera ciąg znaków
"'!+OR"
i znak"
, które są domyślnie drukowane.W rozszczepieniu przebieg programu rozpoczyna się
R
od prawego atomu.'"
tylko zmienia masy węgla)
,5
i-
są ignorowane z różnych powodów. Następnie atom wchodzi w tryb drukowania w"
i drukuje{'_'~}_~
.;
niszczy atom i kończy program.źródło
{'_'~}
Clojure / Common Lisp, 274 bajty
Dodano pewne spacje dla czytelności
Zasadniczo definiuje makro, które zwraca quine w Clojure. Clojure wymaga parametrów definicji makr podanych jako vector (
[]
), podczas gdy Common Lisp (na szczęście) po prostu to ignoruje. Następnie różnicujemy 2 języki, oceniając,'()
który jest równy,nil
a zatem falsey w Common Lisp i jesttrue
w Clojure. Następnie wykonujemy manipulacje ciągami przy użyciu Clojure, którego Common Lisp nawet nie próbuje ocenić, gdy przechodzi do innejif
gałęzi. Z drugiej strony Clojure próbuje sprawdzić, czy inna gałąź jest co najmniej poprawna przed wykonaniem, więc musiałeval
tam użyć , aby zarówno był poprawny w Clojure, jak i wypisał poprawny ciąg w Common Lisp.Uwaga: samo zwrócenie dwóch różnych ciągów znaków może być prawdopodobnie krótsze, ale wtedy nie będzie się różnić od wyzwań poliglota dotyczących wyświetlania różnych ciągów w różnych językach. ¯ \ _ (ツ) _ / ¯
Oryginalny źródłowy Clojure: https://ideone.com/SiQhPf
Wspólna oryginalna wersja źródłowa Lisp: https://ideone.com/huLcty
Wyjście Clojure:
((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))
Wspólne wyjście Lisp:
((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))
Wyjście Clojure uruchamiane we wspólnym Lisp: https://ideone.com/T1DF7H
Odwrotnie: https://ideone.com/Fezayq
źródło
Jelly / GolfScript,
1816 bajtówWeryfikacja
Testowanie wszystkich zaangażowanych programów z dokładnymi strumieniami bajtów można wykonać tylko lokalnie.
Galareta
Ze stroną kodową Jelly program wygląda następująco.
To drukuje ( Wypróbuj online! )
który jest quine w GolfScript ( Wypróbuj online! ), ale błąd parsera w Jelly ( Wypróbuj online! ).
GolfScript
W Latin-1 program wygląda następująco, z niedrukowalnym znakiem DEL pomiędzy
}
iþ
.To drukuje ( Wypróbuj online! )
lub wizualizowane za pomocą strony kodowej Jelly,
który jest quine w Jelly ( Wypróbuj online! ), ale drukuje tylko wiersz w GolfScript ( Wypróbuj online! ).
źródło
”ṘṘ
, więcØV
powinien zniknąć, prawda?JavaScript / C 278 bajtów
Przy oszałamiającym 278 bajtach:
Quine C:
int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}
Quine JavaScript:
A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));
źródło
Befunge / Fission, 35 bajtów
Wypróbuj w Befunge | Wypróbuj w Fission
W Befunge tworzy to quine Fission :
W Fission daje to Befine quine :
źródło
Python / Retina,
70656466 bajtówUżyłem tej samej strategii, co poprzedniej wersji poliglota Python / Retina .
Spróbuj w Pythonie | Spróbuj w siatkówce
#
jest komentarzem w Pythonie, więc po prostu drukuje w Rethine Quine. W Retina pierwszy etap (2 linie) nic nie robi, ponieważ#
na wejściu nie będzie żadnych . Następny etap nie zastępuje niczego podstawą bazy Python. Trzeci etap zastępuje każdy średnik#print _%
kawałkiem. Ostatni etap usuwa wszystko#
.Quine in Retina:
Quine w Pythonie:
Użyte quinesy można zobaczyć w tym wyzwaniu . Quine Retina jest błędem w Pythonie, a quine Python nie ma danych wyjściowych w Retinie.
źródło
Python 3 / Python 2, 62 bajty
Wypróbuj w Python 2 , Python 3 .
Na podstawie quine Python tutaj . Czynnikiem odróżniającym te dwie wersje jest to, co robią
int(-1/2)
: w Pythonie 2/
jest dzielenie liczb całkowitych (zaokrąglanie w dół), z wynikiem-1
; w Pythonie 3/
jest zmiennoprzecinkowe dzielenie (-0.5
), które zostajeint
obcięte0
.Budujemy sznurek
_
w trzech częściach.'_=%r;print(_%%_['
i'int(-1/2):])'
zawsze są takie same. Interesująca część to'~'*-~int(-1/2)
:-~int(-1/2)
jest0
, a tylda nie jest dodawana do łańcucha;-~int(-1/2)
jest1
, a tylda jest dodawana do łańcucha.Tak więc Python 2 generuje quine Python 3
a Python 3 generuje quine Python 2
W każdej wersji wyrażenie wewnątrz
[ :]
ocenia na0
, co powoduje, że plasterek zawiera cały ciąg, podczas gdy w niewłaściwym języku, na który ewaluuje-1
, co powoduje, że plasterek zawiera tylko ostatni znak, obcinając wynik, więc nie jest to pełny quine.źródło
Brain-Flak , brainfuck
46174009 bajtówWypróbuj online!
Wypróbuj online!
Wyjaśnienie jest w drodze Nadal gram w golfa
źródło