Quines są fajne. Poligloty też są fajne. Quiny Polyglot istnieją, ale możemy podnieść poprzeczkę jeszcze wyżej.
Napisz plik zawierający poprawny program dla języków α, β i γ. Gdy plik jest wykonywany (prawdopodobnie po skompilowaniu) jako program języka α lub β, dane wyjściowe programu powinny mieć taką samą formę, jak prawidłowe zgłoszenie do konkursu. Jeśli twój plik jest wykonywany jako program γ, wyświetli liczbę. Wartością tej liczby jest łańcuch poprzednich wykonań programu interpretowany jako liczba binarna.
Wyjaśnienie to może być nieco trudne do zrozumienia, więc oto przykład. Niech Α, Β i Γ będą funkcjami, które wykonują swoje wprowadzanie jako język α, β lub γ odpowiednio. zaprogramuj i zwróć wyjście tych programów. Niech x będzie prawidłowym zgłoszeniem do tego konkursu. Następnie następujące wyrażenie, w którym przetwarzamy x przez język β, α, β, α, α, β i γ w tej kolejności, da 41, ponieważ 41 10 = 101001 2 .
Γ (Β (Α (Α (Β (Α (Β ( x )))))))
Nie można zakładać, że przedostatnie wykonanie w łańcuchu jest wykonaniem w języku β. W przypadku, gdy oryginalne przesłanie jest wykonywane bezpośrednio jako program językowy γ, drukuje się 0.
Twój program będzie działał poprawnie do szesnastu kompilacji w łańcuchu; to znaczy, najwyższa liczba, którą Twój program może wydrukować na końcu to 2 15 - 1. Oczywiście, twój program może obsługiwać dłuższe łańcuchy kompilacji.
To konkurs popularności, który zachęca do kreatywnych rozwiązań. Zgłoszenie z największą liczbą głosów wygrywa.
źródło
magic += Number(System.env.lang_version[-1])
a,b,c
lub1,2,3
=)Odpowiedzi:
Python 2, Python 3,> <> (Fish)
Wyjaśnienie w języku Python
Interpretatory Python 2 i Python 3 działają podobnie, z tą różnicą, że
v=int(1/2*2)
zmienna otrzymuje różne wartości (0
i1
), ponieważ Python 2 używa dzielenia zmiennoprzecinkowego, a Python 3 używa dzielenia liczb całkowitych.W każdym uruchomieniu dodają wyrażenie
+0*2
lub+1*2
do pierwszego wiersza (po#;n
) i dox
łańcucha (po ostatniej komendzie zapisu). Interpreter> <> używa pierwszego dodatku, a pytony drugiego używają do tworzenia poprawnych quines.Kod po
B(A(B(B(x))))
:> <> Objaśnienie (ryby)
Kiedy uruchomisz interpreter> <>, wskaźnik kodu odbija się od
#
owinięć wokół pierwszej linii i zaczynając od końca pierwszej linii, a kurs na zachód zaczyna wypychać liczby na stos. Jeśli operator przyjdzie (+
lub*
) wyskakuje dwa górne elementy ze stosu i odsuwa wynik. Dzięki tej metodzie uzyskujemy reprezentację base2 poprzednich przebiegów (13
w poprzednim przykładzie). Jest to pożądana liczba, więc wyprowadzamy jąn
i kończymy na;
.źródło