Poliglota Quine do tyłu i do przodu!

9

Musisz zrobić poliglota, który wyprowadza swój kod źródłowy w jednym języku i jego kod źródłowy do tyłu w innym. W przeciwieństwie do normalnych zasad, możesz odczytać bieżący plik lub użyć wbudowanego, aby uzyskać kod źródłowy twojego zgłoszenia i odwrócić go w jednym języku. Twój kod źródłowy nie może być palindromem.

Na przykład, jeśli kod źródłowy jest abcxyz, musi on być generowany abcxyzw jednym języku i zyxcbaw innym. Jeśli twój kod jest abcxyzyxbca, jest nieprawidłowy, ponieważ jest palindromem.

Powodzenia!

programmer5000
źródło
3
Nie bez powodu istnieją normalne zasady. Zezwolenie na wbudowane quine prawdopodobnie spowoduje, że to wyzwanie będzie zbyt szerokie, a zezwolenie na kody źródłowe palindromu pozwoli na udzielenie odpowiedzi, które są quinami dla obu języków.
Erik the Outgolfer
@EriktheOutgolfer palindromy nie są teraz dozwolone.
programator5000
1
@EriktheOutgolfer Ah, więc kod źródłowy nie może być palindromem?
Luis Mendo
2
Myślę, że powinieneś zaoferować nagrodę za pierwszą osobę, która ukończy to wyzwanie bez łamania normalnych zasad quine. (może 50 powtórzeń?)
clismique
1
Czytam „w jednym języku”, co wyraźnie wyklucza przypadek, w którym oba języki czytają kod źródłowy, ale obecna najczęściej głosowana odpowiedź robi dokładnie to. Czy możesz edytować, aby wyjaśnić, czy to jest dozwolone?
hvd

Odpowiedzi:

5

PHP i GolfScript, 2 bajty

1

tj. nowa linia i cyfra 1.

To jest odwrotny cytat w GolfScript , napisany na tej stronie przez Justina . PHP nie spowodowało, że jest to język programowania, więc wypisuje dane wejściowe.

Gilles „SO- przestań być zły”
źródło
6

Python 2 / Python 3, 71 bajtów

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

Nie używa żadnych wbudowanych quine.

Dzięki ovs za ogólne przebudzenie mnie.

Erik the Outgolfer
źródło
lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]dla 71 bajtów
ow
@ovs Och, oczywiście, jak o tym nie pomyślałem.
Erik the Outgolfer
6

Batch / bash + tac, 39 bajtów

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Wysyła do przodu w partii. Objaśnienie: Batch widzi pierwszy wiersz jako etykietę i ignoruje go, podczas gdy drugi wiersz po prostu kopiuje plik źródłowy do STDOUT. (Pamiętaj, że musisz wywołać plik z rozszerzeniem lub zmienić %0na %~f0.) bashWidzi cztery polecenia:

  • :nie robi nic (tak samo jak true)
  • tac -r -s '.\|'$'\n' $0
    • -rputs tacjęzyk trybie regex
    • -s określa wyrażenie regularne
    • '.\|'$'\n' jest wyrażeniem regularnym złożonym z
      • . dowolny znak oprócz nowej linii
      • \| lub
      • $'\n' nowa linia
    • Wynik jest taki, że tacdzieli plik na znaki, a nie linie.
  • exit zatrzymuje skrypt, ignorując czwarte polecenie
  • @type %0 (ignorowane)
Neil
źródło
Myślę, że możesz zastąpić pierwszą linię :;rev $0|tac;exit. Ponadto nagłówek powinien zamiast tego powiedzieć Batch / sh + util-linux + coreutils .
Erik the Outgolfer
@EriktheOutgolfer $'\n'to bashizm , rev $0|tacnie odwraca poprawnie nowych linii i czy to naprawdę ma znaczenie, że tacjest w pakiecie?
Neil
$'\n'nie istnieje w zamienniku, który zasugerowałem, i rev $0|tacdziała dla mnie. I myślę, że lepiej jest określać pakiety zamiast poszczególnych narzędzi, ponieważ czasami może pojawić się zamieszanie (np. Który pakiet tac?).
Erik the Outgolfer
@EriktheOutgolfer Wypróbuj online! jest źle. Podobnie jest Wypróbuj online! (ale bardziej subtelnie).
Neil,
Czy mógłbyś podać wyjaśnienie?
programator5000
3

PHP i Retina, 2 bajty

1

To samo co odpowiedź Gille na PHP i GolfScript.

PHP po prostu odczytuje kod i wysyła go bezpośrednio, Retina zastąpi dopasowania pustego ciągu wejściowego i zamieni go na 1, i wypisze go nowym znakiem.

Okx
źródło
2

JS (ES5), JS (ES6), 94 bajty

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

Nie używa żadnych wbudowanych quine. Po prostu wykorzystuje fakt, że funkcje JS wiążą się ze swoim kodem. Prawdopodobnie można grać w golfa więcej.

programmer5000
źródło
1

Jeśli zezwolisz na odczytanie kodu źródłowego, tak naprawdę nie jest to quine.

PHP i sh + util-linux, 6 bajtów

rev $0

Jestem pewien, że zwykłe języki gry w golfa mogą to zrobić w 2 bajtach.

Gilles „SO- przestań być zły”
źródło
W rzeczywistości mogą.
ATaco