To wyzwanie powstało z okazji mojego pierwszego ezoterycznego języka, Backhand !
Język odręczny jest językiem jednowymiarowym z nieliniowym przepływem wskaźnika. Wskaźnik przesuwa się o trzy kroki naraz, wykonując tylko co trzecią instrukcję.
Program 1..1..+..O..@
doda 1 + 1 i wyjście 2 przed zakończeniem. Instrukcje pośrednie są pomijane, więc 1<>1()+{}O[]@
jest to dokładnie ten sam program.
Gdy wskaźnik ma zamiar zejść z końca taśmy, zamiast tego zmienia kierunek i przesuwa się w drugą stronę, podobnie jak 1.@1.O+.
ten sam program. Zauważ, że liczy tylko instrukcję końcową tylko raz. To pozwala nam kompresować większość programów liniowych, takich jak1O+1@
Wyzwanie polega tutaj na napisaniu programu lub funkcji, która pobierze ciąg znaków i wyświetli instrukcje, które zostałyby wykonane, gdyby program był interpretowany jak Backhand (nie trzeba obsługiwać żadnych rzeczywistych instrukcji Backhand). Wyprowadzasz dane wyjściowe, dopóki wskaźnik nie wyląduje na ostatnim znaku ciągu (w tym momencie wykonanie normalnie byłoby cofane).
Ale czekaj , to nie wszystko! Gdy sam program jest interpretowany w ten sposób, wynikowy kod powinien wypisać jedno z poniższych:
(Mostly) works
Turing complete
'Recreational'
(cytaty mogą być'
albo"
, ale nie oba)Perfectly okay
Only a few bugs
Na przykład, jeśli twój kod źródłowy to code 2 backhand
, to program ce cankb od2ahd
powinien wypisać jedną z tych fraz.
Przypadki testowe:
"1 1 + O @" -> "11+O@"
"1O+1@" -> "11+O@"
"HoreWll dlo!" -> "Hello World!"
"abcdefghijklmnopqrstuvwxyz" -> "adgjmpsvyxurolifcbehknqtwz"
"0123456789" -> "0369" (not "0369630369")
"@" -> "@"
"io" -> "io" (Cat program in Backhand)
"!?O" -> "!?O" (Outputs random bits forever in Backhand)
"---!---!" -> "-!-----!"
I program referencyjny napisany oczywiście w Backhand ( może to być trochę wadliwy. Ok, myślę, że to naprawiłem).
Zasady
- Standardowe luki są zabronione
- Dane wejściowe pierwszego programu będą zawierać tylko drukowalne ASCII i znaki nowej linii (to znaczy bajty
0x20
-0x7E
a także 0x0A) - Możesz wybrać, czy drugi program ma być konwertowany z pierwszego bajtu, czy ze znaków UTF-8.
- Drugi program:
- Wielkość liter nie ma znaczenia, więc wynik może być,
pErFectLy OKay
jeśli chcesz. - Każda ilość spacji końcowych / wiodących białych znaków (nowa linia, tabulatory, spacje) jest również w porządku.
- Drugi program powinien być w tym samym języku co pierwszy, choć niekoniecznie ten sam format (program / funkcja)
- Z przyjemnością dołączam sugestie z komentarzy do dodatkowych zwrotów (o ile nie są zbyt krótkie)
- Wielkość liter nie ma znaczenia, więc wynik może być,
- Ponieważ jest to golf golfowy , Twoim celem jest uzyskanie najkrótszej odpowiedzi dla Twojego języka!
- Za dwa tygodnie przyznam 200 nagród za najkrótszą odpowiedź odręczną.
"---!---!"