Załóżmy, że masz 2 języki Ai B. Łańcuch sjest półkwinu Ai Bjeśli spełnia następujące warunki:
sjest quine w językuA.sjest poliglotą wAiB.- Wynikiem działania
sjakoBprogram 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 `12jest 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/nullitd.) 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.