Wprowadzenie
Mam dużo skał ASCII. Są one zbudowane z myślników, rur, V, karet, kątowników, ukośników i spacji. Przykład:
/--\
| |
| |
\--/
Chcę je erodować w następujący sposób:
/\
/ \
\ /
\/
Wszystkie rogi stały się zaokrąglone. Bardziej skomplikowany przykład:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
Po kolejnej erozji stanie się
/\
/ \------\
< \
\ /
\--------/
I kolejny:
/\------\
< \
\ /
\------/
Wyzwanie
Twoim wyzwaniem jest napisanie programu, który może raz zniszczyć dane wejściowe. Możesz założyć, że jest tylko jedna skała i możesz założyć, że jest to jedna zamknięta pętla. Dane wejściowe będą zawierać tylko znaki/\ -| <> ^V \n
i będą zawierały końcowe spacje, aby utworzyć prostokąt. Program może albo pobierać dane wejściowe ze STDIN i wysyłać je do STDOUT, albo może być funkcją. Na końcu każdego wiersza znajduje się znak nowej linii. Erozja musi być zgodna z zasadami przedstawionymi poniżej (uwaga: w przykładach kamień nie jest ukończony, dla ułatwienia wyjaśnienia). Dane wyjściowe muszą być w tym samym formacie co dane wejściowe i mieć taki sam rozmiar jak dane wejściowe. Końcowe spacje można jednak pominąć.
Cięcia będą się rozprzestrzeniać na rurociągi i myślniki i będą się przemieszczać.
/---
|
|
/--
/
|
/-
/
/
Jeśli dwa ukośniki połączą się ze sobą, <>^V
zostanie użyty odpowiedni znak z .
/-----\
| |
| |
| |
\-----/
/---\
/ \
| |
\ /
\---/
/-\
/ \
< >
\ /
\-/
^
/ \
< >
\ /
V
Jeśli jakaś część skały może się scalić, tak się stanie. Uwaga: jeśli jedna część może się scalić, a druga nie może (tj. /\
W drugiej linii przykładu), to ta, która może się scalić, będzie (patrz przykład).
/\
/\-^-/\-/ \--
|
<
|
/
\
|
/
/
\
\
|
|
/-------/\--
/
|
|
|
|
|
|
/
\
|
|
|
W końcu wszystkie skały staną się niczym.
<> ^ /\
V \/
Przypadki testowe
Test 1:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
/\
/ \------\
< \
\ /
\--------/
/\------\
< \
\ /
\------/
/-----\
< \
\ /
\----/
/---\
< \
\ /
\--/
/-\
< \
\ /
\/
^
< \
\/
Test 2:
/----\
| |
| |
| |
| |
\----/
/--\
/ \
| |
| |
\ /
\--/
/\
/ \
/ \
\ /
\ /
\/
/\
/ \
\ /
\/
/\
\/
Test 3:
^ /\
/\--/\--/ \--/ \-\
\ |
| |
/ |
\ |
| |
| |
/ |
< |
\ |
| |
| |
/ |
/ |
\ |
\-----------------/
/-------^----/\-\
/ \
| |
| |
| |
| |
| |
| |
< |
| |
| |
| |
| |
/ |
\ /
\---------------/
/-------------\
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\-------------/
/-----------\
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\-----------/
/---------\
/ \
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\---------/
/-------\
/ \
/ \
/ \
/ \
/ \
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\ /
\-------/
/-----\
/ \
/ \
/ \
/ \
/ \
/ \
| |
| |
\ /
\ /
\ /
\ /
\ /
\ /
\-----/
/---\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\---/
/-\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\-/
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
\ /
\ /
\ /
V
^
/ \
/ \
\ /
\ /
V
^
/ \
\ /
V
^
V
Punktacja
To jest golf golfowy , więc wygrywa program z najmniejszą liczbą bajtów!
Standardowe luki są niedozwolone.
"\x20\x20\x20\x20\x20\x20/\\\n/-\\\x20\x20/\x20\x20\\-\\\n|\x20\x20\\/\x20\x20\x20\x20\x20|\n\\---------/\n"
Odpowiedzi:
Rdza
Po pewnym czasie zrezygnowałem z tego, instrukcje wydają się niejasne. Jednak dostałem trochę kurczących się kamieni (patrz dane wyjściowe). Jestem również pewien, że należy to zrobić w przestrzeni 2-wymiarowej, a nie w 1-wymiarowej strunie, gdy próbowałem tutaj. Moim głównym „problemem” jest to, że transformuję dane wejściowe, zaznaczając spację jako „wewnątrz” lub „na zewnątrz” skały, niestety w tym momencie nie można odróżnić wewnętrznej i górnej / dolnej krawędzi.
wynik
źródło