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.
Odpowiedzi:
GolfScript + Rozszczepienie ,
1918 bajtówPodążanie za linią jest konieczne.
To jest prawdziwa quine w GolfScript. Wypróbuj online!
W Fission drukuje
co jest prawdziwym quine w Fission . Wypróbuj online!
Wyjaśnienie
W GolfScript dowolna forma
jest quine, o ile
...
pozostawia sznurek".~"
na stosie..
Powiela blok, tak, że jedna kopia, która zostanie wydrukowana na końcu, a~
wykonuje go, dzięki czemu możemy korzystać z jej zawartości, aby wydrukować.~
sobie. W takim przypadku blok popycha ciąga następnie obcina go do pierwszych dwóch znaków za pomocą
2<
.Program rozszczepienia naprawdę działa dokładnie tak samo jak sam quine , ponieważ pierwszy i trzeci wiersz są całkowicie ignorowane przez program.
źródło
Ruby + (JavaScript lub Python 3), 76 bajtów
To kolejne wyzwanie, które można rozwiązać za pomocą mojego nowego ulubionego języka, prawie powszechnego podzbioru Ruby, JavaScript i Python 3; a biorąc pod uwagę, że nie znamy jeszcze odpowiedzi w egzotycznych językach, a wiele osób lubi widzieć rozwiązania w języku innym niż golf, pomyślałem, że mógłbym je wnieść. Co więcej, ta sama odpowiedź rozwiązuje to wyzwanie na wiele sposobów jednocześnie.
Oto
s
:To jest quine w Ruby. To nie jest quine w JavaScript ani Python 3; jeśli uruchomisz go w jednym z tych języków, jego wynik
s'
ma końcowy znak nowej linii, a zatem jest inny:Jednak
s'
to Quine poliglota w JavaScript i Python 3! (Jak zwykle dla mnie, używam implementacji JavaScript w Rhino, zarówno dla wygody (ponieważ działa ona z wiersza poleceń, a nie wymaga przeglądarki), i ponieważ ma dziwną standardową bibliotekę, w którejprint
zapisuje na standardowe wyjście.) Oba języki powstająs'
w wyniku uruchomienia dowolnego programu.Jako bonus, ten program rozwiązuje również problem w odwrotnej kolejności. Jeśli zdecydujesz się na uruchomienie
s'
w Ruby, wydrukuje oryginalny programs
ponownie. Jako takas'
jest poprawną (ale nieco dłuższą, 77 bajtową) odpowiedzią na pytanie.W tym momencie prawie zaczynam myśleć, że „różnice w tym, czy wynik kończy się znakiem nowej linii wystarczającym do zaliczenia dwóch programów jako różnych”, należy uznać za standardową lukę, biorąc pod uwagę, że jest to drugi zestaw języków (poza dobrze znanym GolfScript / CJam), w którym można wykonać lewę.
źródło
Vitsy (tryb awaryjny) i Y, 9 bajtów, niekonkurujące.
W Vitsy jest to quine. W Y drukuje się
Ugrd3*Z'
; po uruchomieniu drukuje toUgrd3*Z'
, co jest literą w Y. Y jednak postdatuje to pytanie.Co widzi Vitsy:
Co widzi Y:
źródło
CJam + GolfScript, 9 bajtów
To jest quine w CJam. W GolfScript wypisuje się z końcowym znakiem nowej linii, który jest quine w GolfScript.
Nie jestem pewien, czy CJam należy uznać za trywialną pochodną GolfScript. Ale myślę, że są zupełnie inne i przynajmniej nie są trywialne.
źródło