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.
Odpowiedzi:
RProgN , 3 bajty
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 :
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
który z kolei drukuje oryginał.
! enilno ti yrT
źródło
1\n1
, w którym oba1
s kodują się wzajemnie; być może jest to właściwy quine, ale nie poprawny quine.)Befunge-98 , 33 bajty
Wypróbuj online!
źródło
#
aby uzyskać nagłówek. Odwiedź także Tryitonline.net i uzyskaj tłumacza onlineg
został niedozwolony w quinach Befunge, ponieważ odczytuje źródło programu bezpośrednio z pamięci?Rozszczepienie 2 , 10 bajtów
Wypróbuj online!
To drukuje:
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:Ten program ma dwa punkty wejścia na
L
s, 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'L
ustawia masowe węgla do punktu koduL
, ale to bez znaczenia.;
niszczy również ten atom, a ponieważ nie ma już atomów, program się kończy.Teraz na odwrót:
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,L
następnie jest ignorowany i;
niszczy atom i kończy działanie programu.źródło