Napisz program lub funkcję, która pobiera niepusty łańcuch jednowierszowy znaków drukowalnych ascii bez spacji:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Możesz założyć, że dane wejściowe są prawidłowe.
Na podstawie danych wejściowych narysuj nowy ciąg ułożony na siatce tekstowej spacji i znaków nowej linii zgodnie z żółtymi zasadami graficznymi , w których żółw zawsze zajmuje jedno pole siatki i może być skierowany tylko w kierunku kardynalnym.
Wydrukuj pierwszy znak w ciągu wejściowym do siatki tekstowej. Żółw zaczyna się tutaj w prawo. Iteruj po pozostałych znakach w ciągu wejściowym (zatrzymując się tylko, jeśli żółw utknie), powtarzając ten proces:
Jeśli wszystkie 4 pola siatki bezpośrednio sąsiadujące z żółwiem są wypełnione (tzn. Żadne z nich nie jest spacją), przestań iterować. Żółw utknął, a siatka jest tak kompletna, jak to tylko możliwe.
Spójrz na bieżący znak na wejściu w porównaniu do poprzedniego znaku:
Jeśli obecny znak jest leksykalny przed poprzednim, obróć żółwia o ćwierć obrotu w lewo.
Jeśli obecna postać jest leksykalna po poprzedniej, obróć żółwia o ćwierć obrotu w prawo.
Jeśli obecna postać jest równa poprzedniej, nie obracaj żółwia.
Jeśli pole siatki, przed którym stoi żółw, nie jest puste (tj. Nie jest spacją), kilkakrotnie obróć żółwia o ćwierć obrotu w lewo, aż będzie ona zwrócona w stronę pustego pola siatki.
Przesuń żółwia o jeden stopień do przodu w kierunku, w którym patrzy, i wydrukuj obecną postać na siatce w nowej lokalizacji żółwia.
Wydrukuj lub zwróć wynikowy ciąg siatki tekstowej bez zbędnych wierszy lub kolumn białych znaków. Linie mogą mieć końcowe spacje do kolumny znajdującej się najbardziej na prawo od spacji, ale nie dalej. Pojedynczy znak nowej linii jest opcjonalnie dozwolony.
Najkrótszy kod w bajtach wygrywa.
Przykład
Oto wszystkie etapy wprowadzania spattuuxze
. Te ^V<>
znaki pokazują kierunek żółwia jest skierowany, są one nie część wejścia lub wyjścia.
s>
^
p
s
<ap
s
^
t
ap
s
^
t
t
ap
s
tu>
t
ap
s
tuu>
t
ap
s
tuu
t x
apV
s
tuu
<zx
ap
s
W tym momencie żółw utknął, więc e
nigdy się nie drukuje, a końcowy wynik to:
tuu
tzx
ap
s
Poniżej przedstawiono podobne, ale niepoprawne dane wyjściowe, ponieważ ma niepotrzebną wiodącą kolumnę białych znaków:
tuu
tzx
ap
s
Przypadki testowe
spattuuxze
tuu
tzx
ap
s
spattuuxxze
tuu
t x
apx
sze
1111111
1111111
ABCDEFGHIJKLMNOP
PEFG
ODAH
NCBI
MLKJ
`_^]\[ZYXWVUTSR
^_RS
\]`UT
[ZWV
YX
Woo!
W
o
o!
woo!
!o
o
w
Wheeee
W
heeee
banana
a
an
an
b
Turtle
T
ure
tl
turTle
e
tTl
ur
(Powiedz mi od razu, jeśli któreś z nich wydają się nieprawidłowe).
PONMLKJIHGFEDCBA
, ponieważ wynik nie jest tylko kwadratem i kontrastuje zABCDEFGHIJKLMNOP
celem podkreślenia asymetrii w regułach.Odpowiedzi:
Groovy (357 bajtów)
Żadnych zewnętrznych libów żółwiowych nie użyto i żadnego żółwia nie skrzywdzono.
Wypróbuj tutaj: https://groovyconsole.appspot.com/edit/5115774872059904
Poprzednie próby
Groovy (397 bajtów)
https://groovyconsole.appspot.com/script/5179465747398656
źródło
Java,
408406 bajtówFunkcja pobiera dane wejściowe jako ciąg znaków i zwraca wynik jako ciąg znaków.
Wewnętrznie wykorzystuje tablicę znaków 2D do przechowywania liter i zachowuje min. I maks. Kolumny i wiersze używane w celu zwrócenia użytej pod-macierzy.
Tak więc w wyniku String nie ma wiodących kolumn białych spacji, ale są końcowe białe spacje aż do prawej kolumny z charakterem spacji. Na końcu dodawana jest nowa linia.
Wszelkie sugestie dotyczące gry w golfa są mile widziane :-)
źródło
%
jest resztą w java i może być ujemny, co nie jest pożądane. Dzięki za sugestie :-)Python3,
419414 bajtówźródło