pengantar
Saya punya banyak batu ASCII. Mereka dibangun dengan tanda hubung, pipa, Vs, caret, kurung sudut, garis miring dan spasi. Contoh:
/--\
| |
| |
\--/
Saya ingin mengikisnya, seperti ini:
/\
/ \
\ /
\/
Semua sudut menjadi lebih bulat. Contoh yang lebih rumit:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
Setelah erosi yang lain, itu akan menjadi
/\
/ \------\
< \
\ /
\--------/
Dan satu lagi:
/\------\
< \
\ /
\------/
Tantangan
Tantangan Anda adalah menulis program yang dapat mengikis input satu kali. Anda dapat mengasumsikan hanya ada satu batu dan Anda dapat menganggap itu adalah satu loop tertutup. Input hanya akan berisi karakter /\ -| <> ^V \ndan akan memiliki spasi tambahan untuk membuat persegi panjang. Program dapat memperoleh input dari STDIN dan output ke STDOUT atau dapat berupa fungsi. Di akhir setiap baris adalah karakter baris baru. Erosi harus mengikuti aturan-aturan yang diuraikan di bawah ini (Catatan: pada contoh-contoh batu tidak selesai, ini untuk memudahkan penjelasan). Output harus dalam format yang sama dengan input, dengan ukuran yang sama dengan input. Namun, spasi tambahan dapat dihilangkan.
Garis miring akan menyebar ke jalur pipa dan garis putus-putus dan bergerak melintas.
/---
|
|
/--
/
|
/-
/
/
Jika dua garis miring bergabung bersama, karakter yang sesuai <>^Vakan digunakan.
/-----\
| |
| |
| |
\-----/
/---\
/ \
| |
\ /
\---/
/-\
/ \
< >
\ /
\-/
^
/ \
< >
\ /
V
Jika bagian dari batu dapat bergabung, itu akan terjadi. Catatan: jika satu bagian dapat bergabung tetapi yang lain tidak bisa (yaitu,/\ di baris kedua dari contoh), maka yang dapat menggabungkan akan (lihat contoh).
/\
/\-^-/\-/ \--
|
<
|
/
\
|
/
/
\
\
|
|
/-------/\--
/
|
|
|
|
|
|
/
\
|
|
|
Akhirnya, semua batu akan menjadi apa-apa.
<> ^ /\
V \/
Uji kasus
Tes 1:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
/\
/ \------\
< \
\ /
\--------/
/\------\
< \
\ /
\------/
/-----\
< \
\ /
\----/
/---\
< \
\ /
\--/
/-\
< \
\ /
\/
^
< \
\/
Tes 2:
/----\
| |
| |
| |
| |
\----/
/--\
/ \
| |
| |
\ /
\--/
/\
/ \
/ \
\ /
\ /
\/
/\
/ \
\ /
\/
/\
\/
Tes 3:
^ /\
/\--/\--/ \--/ \-\
\ |
| |
/ |
\ |
| |
| |
/ |
< |
\ |
| |
| |
/ |
/ |
\ |
\-----------------/
/-------^----/\-\
/ \
| |
| |
| |
| |
| |
| |
< |
| |
| |
| |
| |
/ |
\ /
\---------------/
/-------------\
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\-------------/
/-----------\
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\-----------/
/---------\
/ \
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\---------/
/-------\
/ \
/ \
/ \
/ \
/ \
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\ /
\-------/
/-----\
/ \
/ \
/ \
/ \
/ \
/ \
| |
| |
\ /
\ /
\ /
\ /
\ /
\ /
\-----/
/---\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\---/
/-\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\-/
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
\ /
\ /
\ /
V
^
/ \
/ \
\ /
\ /
V
^
/ \
\ /
V
^
V
Mencetak gol
Ini adalah kode-golf , sehingga program dengan jumlah byte terkecil menang!
"\x20\x20\x20\x20\x20\x20/\\\n/-\\\x20\x20/\x20\x20\\-\\\n|\x20\x20\\/\x20\x20\x20\x20\x20|\n\\---------/\n"