Załóżmy, że masz 2 języki A
i B
. Łańcuch s
jest półkwinu A
i B
jeśli spełnia następujące warunki:
s
jest quine w językuA
.s
jest poliglotą wA
iB
.- Wynikiem działania
s
jakoB
program jest inny ciąg znakóws'
, który jest quine inB
.
Celem tego wyzwania jest napisanie półkwiny w dwóch różnych językach. To jest golf golfowy , więc wygrywa najkrótszy kod, a najwcześniejsza odpowiedź jest używana jako remis.
Zasady dla Quines
Akceptowane są tylko prawdziwe quinesy. Oznacza to, że musisz wydrukować cały kod źródłowy dosłownie do STDOUT, bez :
- czytanie kodu źródłowego, bezpośrednio lub pośrednio.
- polegając na środowisku REPL, które po prostu ocenia i drukuje każde podane wyrażenie.
- opierając się na funkcjach językowych, które w niektórych przypadkach drukują tylko źródło.
- używając komunikatów o błędach lub STDERR, aby napisać całość lub część quine. (Możesz pisać różne rzeczy do STDERR lub generować ostrzeżenia / niekrytyczne błędy, o ile STDOUT jest poprawnym quine, a komunikaty o błędach nie są jego częścią).
Ponadto kod źródłowy nie może składać się wyłącznie z literałów (niezależnie od tego, czy są to literały łańcuchowe, literały liczbowe itp.) I / lub NOP. Na przykład `12
jest poliglotą w Jelly i Pyth, ale w Jelly jest NOP i literałem liczbowym, więc nie jest poprawny.
Wszelkie dane wyjściowe, których nie można ukryć (takie jak powiadomienia o prawach autorskich, komunikaty o uruchamianiu / zamykaniu lub końcowe wyświetlanie wiersza) mogą zostać zignorowane w danych wyjściowych ze względu na ważność quine.
Zasady dla Polyglots
Dwa używane języki muszą być wyraźnie różne. W szczególności:
- Nie mogą to być różne wersje tego samego języka (np. Python 2 vs. Python 3).
- Nie mogą to być różne dialekty tego samego języka (np. Pascal vs. Delphi).
- Jeden język może nie być podzbiorem drugiego (np. C vs. C ++ 1 ).
- Jeden język może nie być trywialną pochodną drugiego (np. Matlab vs. Octave 2 , brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs. wszystkie inne trywialne pochodne brainfuck).
Różne zasady
- Nie możesz zaakceptować danych wejściowych z STDIN (lub innego źródła). Jeśli wybrany język musi pobierać dane wejściowe, dane wejściowe muszą być puste (pusty ciąg znaków, potok z
/dev/null
itd.) Lub dane wyjściowe programu nie mogą zależeć od danych wejściowych. - Aby sprostać temu wyzwaniu, musisz napisać kompletny program. Wymaganie dodatkowego kodu do uruchomienia rozwiązania jest niedozwolone (takie jak przypisywanie i wywoływanie funkcji lambda zdefiniowanej w rozwiązaniu).
1: Tak, wiem, że C nie jest tak naprawdę podzbiorem C ++. Jest jednak wystarczająco blisko, aby uznać go za jeden z celów poliglotów, więc liczę to dla tego wyzwania.
2: Podobnie jak w punkcie 1 powyżej, chociaż Octave nie jest technicznie w 100% kompatybilny z Matlabem, został zaprojektowany tak, aby był kompatybilny i jest wystarczająco blisko, aby zezwolenie na poliglotę Matlab / Octave trywializowało wyzwanie.