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!


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:



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.


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)

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.


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.


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.


W rzeczywistości mogą.
ATaco
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.