introduzione
Ho un sacco di rocce ASCII. Sono costruiti con trattini, tubi, V, punti di inserimento, parentesi angolari, barre e spazi. Esempio:
/--\
| |
| |
\--/
Voglio eroderli, in questo modo:
/\
/ \
\ /
\/
Tutti gli angoli sono diventati più arrotondati. Un esempio più complicato:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
Dopo un'altra erosione, sarebbe diventata
/\
/ \------\
< \
\ /
\--------/
E un altro:
/\------\
< \
\ /
\------/
Sfida
La tua sfida è scrivere un programma in grado di erodere un input una volta. Puoi presumere che ci sia solo una roccia e puoi presumere che sia un circuito chiuso. L'input conterrà solo i caratteri /\ -| <> ^V \ne avrà spazi finali per creare un rettangolo. Il programma può ottenere input da STDIN e output su STDOUT o può essere una funzione. Alla fine di ogni riga c'è un carattere di nuova riga. L'erosione deve seguire le regole descritte di seguito (Nota: negli esempi la roccia non è completata, questo per facilitare la spiegazione). L'output deve essere nello stesso formato dell'input, con le stesse dimensioni dell'input. Tuttavia, gli spazi finali possono essere omessi.
Le barre si spargeranno su tubazioni e trattini e si sposteranno attraverso.
/---
|
|
/--
/
|
/-
/
/
Se due barre si uniscono, <>^Vviene utilizzato il carattere appropriato di .
/-----\
| |
| |
| |
\-----/
/---\
/ \
| |
\ /
\---/
/-\
/ \
< >
\ /
\-/
^
/ \
< >
\ /
V
Se una parte della roccia può fondersi, lo farà. Nota: se una parte può fondersi ma l'altra no (cioè, /\nella seconda riga dell'esempio), allora quella che può unire lo farà (vedi esempio).
/\
/\-^-/\-/ \--
|
<
|
/
\
|
/
/
\
\
|
|
/-------/\--
/
|
|
|
|
|
|
/
\
|
|
|
Alla fine, tutte le rocce diventeranno nulla.
<> ^ /\
V \/
Casi test
Test 1:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
/\
/ \------\
< \
\ /
\--------/
/\------\
< \
\ /
\------/
/-----\
< \
\ /
\----/
/---\
< \
\ /
\--/
/-\
< \
\ /
\/
^
< \
\/
Test 2:
/----\
| |
| |
| |
| |
\----/
/--\
/ \
| |
| |
\ /
\--/
/\
/ \
/ \
\ /
\ /
\/
/\
/ \
\ /
\/
/\
\/
Test 3:
^ /\
/\--/\--/ \--/ \-\
\ |
| |
/ |
\ |
| |
| |
/ |
< |
\ |
| |
| |
/ |
/ |
\ |
\-----------------/
/-------^----/\-\
/ \
| |
| |
| |
| |
| |
| |
< |
| |
| |
| |
| |
/ |
\ /
\---------------/
/-------------\
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\-------------/
/-----------\
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\-----------/
/---------\
/ \
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\---------/
/-------\
/ \
/ \
/ \
/ \
/ \
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\ /
\-------/
/-----\
/ \
/ \
/ \
/ \
/ \
/ \
| |
| |
\ /
\ /
\ /
\ /
\ /
\ /
\-----/
/---\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\---/
/-\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\-/
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
\ /
\ /
\ /
V
^
/ \
/ \
\ /
\ /
V
^
/ \
\ /
V
^
V
punteggio
Questo è code-golf , quindi vince il programma con il minor numero di byte!
Non sono ammesse scappatoie standard .
"\x20\x20\x20\x20\x20\x20/\\\n/-\\\x20\x20/\x20\x20\\-\\\n|\x20\x20\\/\x20\x20\x20\x20\x20|\n\\---------/\n"