RoboCritters ( etymologia ) to nowy ezoteryczny język programowania (nie przejmuj się jego wyszukiwaniem, właśnie go wymyśliłem). Jest to wariant z brainfuck (BF), nieco bardziej złożone niż w zwykłych systemach podstawienia operatora. Każdy program w RoboCritters jest prostokątną siatką tekstu, która zawiera tylko siedem znaków . []/\|
plus nowe linie do kształtowania siatki.
Przykładowy program RoboCritters:
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
Aby przetłumaczyć program RoboCritters na BF, spójrz na każdy nie-nowy wiersz w siatce w normalnej kolejności czytania (od lewej do prawej, a następnie od góry do dołu), np |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/
.
Jeśli sekcja 4 × 2 siatki rozciągająca się w prawo iw dół od bieżącego znaku dokładnie pasuje do jednego z ośmiu stworzeń robota wymienionych poniżej, dołącz odpowiednią komendę BF ( ><+-.,[]
) do (początkowo pustego) programu BF.
Jeśli sekcja siatki 4 × 2 nie pasuje do żadnego ze stworzeń robota lub wykracza poza granice , nic nie jest dodawane do programu BF.
Joybot,
>
polecenie:[..] \][/
Calmbot,
<
polecenie:[..] /][\
Squidbot,
+
polecenie:[..] //\\
Spiderbot,
-
polecenie:[..] ||||
Bunnybot,
.
polecenie:[][] [..]
Toothbot,
,
polecenie:[..] |/\|
Foxbot,
[
polecenie:|\/| [..]
Batbot,
]
polecenie:[..] \/\/
Czytając przykładowy program
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
widzimy, że najpierw spotykamy Foxbota (w kolumnie 1, rząd 1), potem Toothbota (c1, r2), następnie Bunnybota (c5, r2), a na końcu Batbota (c9, r3). To odpowiada programowi BF [,.]
.
Zauważ, że Foxbot i Toothbot pokrywają się. To jest celowe; stworzenia robota nie są interpretowane inaczej, gdy się nakładają .
Wyzwanie
Napisz najkrótszy możliwy program, który pobierze program RoboCritters i wyświetli jego odpowiednik BF. Nie musisz uruchamiać BF ani sprawdzać, czy jest poprawny, tłumacz tylko kod RoboCritters na kod BF.
Detale
Wszystkie wejściowe programy RoboCritters będą ważne, to znaczy będą one dokładnie prostokątnym blokiem tekstu zawierającym tylko siedem znaków
. []/\|
plus znaki nowej linii do jego ukształtowania. Nowe linie mogą być w dowolnej wygodnej wspólnej reprezentacji . Opcjonalnie możesz założyć, że programy mają jeden końcowy znak nowej linii.Musisz obsługiwać programy RoboCritters mniejsze niż 4 × 2, w tym program 0 × 0 pusty (lub pojedynczy znak nowej linii). Wszystkie odpowiadają pustemu programowi BF (pusty ciąg znaków).
Wyjściowy program BF powinien składać się z jednego wiersza zawierającego tylko osiem znaków polecenia BF
><+-.,[]
. Opcjonalnie może występować pojedynczy znak nowej linii.Wejdź w jakikolwiek zwykły sposób (stdin / plik tekstowy / wiersz poleceń) i wypisz na stdout lub najbliższą alternatywę twojego języka.
Zamiast programu możesz napisać funkcję, która pobiera program RoboCritters jako ciąg znaków i wypisuje lub zwraca ciąg programu BF.
Przykłady
Dane wejściowe: (wariant powyższego przykładu)
|\/|[][] [..][][] |/\|[..] \/\/
Wynik:
[,.]
Dane wejściowe: (testuje wszystkie stworzenia robota)
[..][[[[[..]]. ]|\/| \][/[..]//\\[..][..] [..]/][\[][]|/\|[..] ||||/\| [..]| |\/\/
Wynik:
>+[<,-.]
Wejście:
[..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][] //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]
Wyjście: ( program BF Hello World )
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Dane wejściowe: (brak stworzeń robota)
/\\\[]. ]..[..] \\//||\
Dane wyjściowe: (pusty ciąg)
Punktacja
Najkrótsze przesłanie w bajtach wygrywa. ( Handy byte counter. ) Tiebreaker jest najwyżej głosowanym postem.
źródło