Napisz kod, który działa jak program cat. To znaczy, aby wprowadzić ciąg i wyprowadzić go takim, jaki jest. Ale normalne odwrócenie kodu musi generować normalne odwrócenie ciągu wejściowego. A wizualna rewersja twojego kodu musi generować wizualną rewersję ciągu wejściowego.
Normalne odwrócenie to odwrócona sekwencja znaków w łańcuchu. Odwrócenie wizualne jest normalnym odwróceniem z odpowiednio ()[]{}<>
zastąpionymi znakami )(][}{><
.
Możesz użyć dowolnej strony kodowej zawierającej znaki ()[]{}<>
i opublikowane przed tym wyzwaniem do zdefiniowania znaków. Musisz użyć tej samej strony kodowej dla całego kodu. Twój oryginalny kod musi być prawidłowy na tej stronie kodowej, a zastosowanie do niego jednego z odwróconych kodów powinno się przynieść.
To jest code-golf , wygrywa najkrótszy kod w bajtach.
Przykład
Dla struny AB(XY)
, jej normalne i wizualne są powroty )YX(BA
i (YX)BA
odpowiednio.
Jeśli masz kod (w hipotetycznym języku) AB(XY)
, kod )YX(BA
i (YX)BA
powinien wypisywać odpowiednio odwrócenie normalne i wizualne ciągu wejściowego. I AB(XY)
powinien działać jako program dla kotów.
źródło
Odpowiedzi:
05AB1E , 16 bajtów
Wykorzystuje fakt, że 05AB1E ma stałą predefiniowaną
"()<>[]{}"
i nie ma wpływu na odwrócenie wizualne.Kod:
Wyjaśnienie:
Wypróbuj online!
Wywrócony:
Wyjaśnienie:
Wypróbuj online!
Odwrócony wizualnie:
Wyjaśnienie:
Wypróbuj online!
Wykorzystuje kodowanie CP-1252 .
źródło
CJam, 21 bajtów
Sprawdź to tutaj.
Normalna rewersja:
Sprawdź to tutaj.
Odwrócenie wizualne:
Sprawdź to tutaj.
Wyjaśnienie
Po pierwsze, normalny kod:
Jest to proste:
q
odczytuje wszystkie dane wejściowe,e#
komentuje pozostałą część programu, a dane wejściowe są drukowane niejawnie na końcu.Teraz normalna rewersja:
I wreszcie odwrócenie wizualne:
źródło
Haskell, 124 bajty
Naprzód:
Normalny bieg wsteczny:
Wizualna rewers:
Każda wersja definiuje funkcję,
f
która pobiera i zwraca ciąg znaków. W trybie przesyłania dalejf
jest funkcja tożsamościid
, reszta kodu to komentarz. W normalnym trybie odwrotnym osłona1<2
wf
aktualnie się znajdujeTrue
, toreverse
jest stosowane. W wizualnym trybie odwrotnym przełącznik<
jest włączony,>
a osłona jestFalse
. Druga osłona jest odwrotnie i działaTrue
w trybie wizualnym, dlatego dodatkowoq
zastosowano przełącznik, który przełącza „() <> {} []”.Poza tym
<
i>
strażnicy, mój kod nie używa nawiasów, więc nie można ich pomieszać.źródło
Bash + wspólne narzędzia linux, 51
Normalna rewersja:
Odwrócenie wizualne:
Główna sztuczka polega na tym, że łańcuch
()[]{}<>
jest zakodowany jako 691E97CA5D607DB5 (podstawa 15). Wynikowedc
polecenie da ten sam wynik po obu rodzajach cofania. Jednak'()[]{}<>'
literał łańcuchowy jest wrażliwy na typ odwrócenia.tac
jest wymagane do odwrócenia kolejności linii wejściowych irev
jest wymagane do odwrócenia znaków każdej linii. Każde wejście ASCII powinno być dopuszczalne.źródło
MATL,
26242216 bajtówNaprzód
Wypróbuj online!
Wyjaśnienie:
Normalna rewersja:
Wypróbuj online!
Wyjaśnienie:
Odwrócenie wizualne:
Wypróbuj online!
Wyjaśnienie:
źródło
()[]{}<>
zastąpionymi znakami)(][}{><
.GolfScript,
3228 bajtówWypróbuj online!
Normalna rewersja:
Wypróbuj online!
Odwrócenie wizualne:
Wypróbuj online!
Fakt, że niedopasowane
}
zakończenie programu w GolfScript, uczyniło to dość prostym. Jestem jednak całkiem pewien, że mój kod do zamiany nawiasów nie jest jeszcze optymalny.źródło
Python 2.7, 208 bajtów
Naprzód
Normalna rewersja
https://eval.in/574639
Odwrócenie wizualne
https://eval.in/574638
Wszystkie kierunki odczytywane są ze standardu do EOF.
Nic super sprytnego tutaj. Końcowe komentarze, aby wykonać tylko kod do przodu i do tyłu, a następnie
exec
instrukcję w bloku try, aby wyłapać błędy składniowe dla dwóch różnych wersji.źródło