Okres 2 Odwrócony Quine

10

Twoim zadaniem jest napisanie programu, który wypisze swój kod źródłowy w odwrotnej kolejności. Jednak po uruchomieniu odwróconego kodu powinien on wypisać kod źródłowy skierowany we właściwym kierunku.

Przykład

Powiedz, że twój program to abc. Po uruchomieniu powinien zostać wypisany cba. cba, po uruchomieniu powinien wypisać dane abc.

Zasady

Twój program powinien przestrzegać wszystkich zasad właściwego quine (z wyjątkiem wypisywania kodu źródłowego). Palindromy są niedozwolone.

Losowa uwaga: zdaję sobie z tego sprawę, ale uważam, że to wyzwanie jest inne, ponieważ przekształcony kod musi mieć te same właściwości.

użytkownik Internetu
źródło
Powiązane
HyperNeutrino

Odpowiedzi:

9

RProgN , 3 bajty

1
2

Dzięki @MartinEnder za przypomnienie mi o tej odpowiedzi .

Wypróbuj online!

Jak to działa

Wykorzystuje to potencjalną wadę w naszej definicji właściwego quine :

Musi istnieć możliwość zidentyfikowania części programu, która koduje inną część programu. („Różne”, co oznacza, że ​​dwie części pojawiają się w różnych pozycjach.)

Ponadto quine nie może uzyskać dostępu do własnego źródła, bezpośrednio lub pośrednio.

Tak jest oczywiście w tym przypadku, ponieważ wynik jest odwrotnością kodu, a kod nie jest palindromem.

RProgN - odwrotna notacja programisty - używa stosu LIFO i drukuje na nim elementy w kolejności, w której zostały pop-up . Dwa żetony 1 i 2 , oddzielone spacjami i / lub znakami nowej linii, zostają wyświetlone w odwrotnej kolejności i są drukowane oddzielnie przez znak nowej linii.

Spowoduje to wydrukowanie odwróconego programu

2
1

który z kolei drukuje oryginał.

! enilno ti yrT

Dennis
źródło
Podoba mi się adres URL.
Christopher
4
Powinniśmy to naprawić ... Zamieszczę nową odpowiedź (na podstawie tego komentarza ) w sprawie meta pytania, ale prawdopodobnie nie przyciągnie wystarczającej uwagi, aby konkurować z istniejącymi odpowiedziami.
ETHprodukcje
2
@ETHproductions: Zrób to. Wydaje mi się, że istnieje kilka problemów z naszą obecną prawidłową definicją quine. (Prawdopodobnie mój język 7 jest studium w skrajnych przypadkach dla właściwej quinness; oprócz tego konkretnego przypadku, może obsłużyć wiele innych.) FWIW, nie jestem pewien, czy jest to właściwy odwrotny quine nawet przez nasz obecny definicja; 1 i 2 są wyraźnie zakodowane same przez się, więc jedynym potencjalnym zainteresowaniem jest to, co koduje nową linię. (Różni się to od a 1\n1, w którym oba 1s kodują się wzajemnie; być może jest to właściwy quine, ale nie poprawny quine.)
9

Befunge-98 , 33 bajty

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Wypróbuj online!

IQuick 143
źródło
Dobra pierwsza odpowiedź. Ale użyj, #aby uzyskać nagłówek. Odwiedź także Tryitonline.net i uzyskaj tłumacza online
Christophera
2
Wejdź również pod przycisk Zapisz i użyj kodu kodegolfa.
Christopher
Zredagowałem go w TIO. Po prostu zapomniałem dodać link, ale teraz został dodany i dziękuję za wskazówkę nagłówka
IQuick 143
Pamiętaj, że opcja „przesłania kodu” w TIO daje szablon początkowy, w tym nagłówek.
Ørjan Johansen
Myślałem, że gzostał niedozwolony w quinach Befunge, ponieważ odczytuje źródło programu bezpośrednio z pamięci?
7

Rozszczepienie 2 , 10 bajtów

"L;L'!+!'_

Wypróbuj online!

To drukuje:

_'!+!'L;L"

Wypróbuj online!

I wzajemnie.

Wyjaśnienie

Jest to modyfikacja odwrotnego quine . Działa tutaj na naszą korzyść, która !jest używana do drukowania, a także jest tylko o jeden punkt kodu od cytatu ". Ułatwia to, aby sekcja drukowania cytatów była palindromiczna (the '!+!'). Zacznijmy od pierwszego kodu:

"L;L'!+!'_

Ten program ma dwa punkty wejścia na Ls, z których każdy tworzy atom lewostronny. Jednak właściwy trafia natychmiast w ten, ;który go niszczy. Lewy wchodzi w tryb ciągów znaków i zawija się do końca, dzięki czemu drukuje cały kod (oprócz ") od tyłu do przodu. To już nam daje _'!+!'L;L. Pozostało tylko wydrukować ". _można zignorować, '!ustawia masę atomu na 33 (punkt kodowy !), +inkrementuje ją "i !drukuje. To wszystko zrobione wyjście. Do 'Lustawia masowe węgla do punktu kodu L, ale to bez znaczenia. ;niszczy również ten atom, a ponieważ nie ma już atomów, program się kończy.

Teraz na odwrót:

_'!+!'L;L"

Ponownie mamy dwa punkty wejścia, ale jeden atom zostaje natychmiast zniszczony. Tym razem !+!'najpierw przejdziemy przez sekcję, więc zaczynamy od wydrukowania oferty. To '_znowu nie ma znaczenia, ale potrzebujemy tutaj _(lub jakiejś innej bezużytecznej postaci), aby uniknąć 'ucieczki ". Atom zawija się do końca, raz w trybie łańcucha przechodzi do kodu źródłowego, aby wydrukować resztę programu w odwrotnej kolejności, Lnastępnie jest ignorowany i ;niszczy atom i kończy działanie programu.

Martin Ender
źródło