Dahulu kala, ketika saya menghabiskan lebih banyak waktu bermain RPG, salah satu masalah yang dimiliki beberapa pemain, adalah melacak pergerakan partai dan menggambar peta yang tepat. Jadi saya datang dengan ide, untuk memeriksa bagaimana kalian menghadapi masalah ini.
Tugas adalah menulis fungsi, yang mengambil sebagai input parameter daftar arah (dilewati sebagai struktur pilihan Anda) ^v<>
, menampilkan peta ruang bawah tanah. Sebagai contoh untuk input: >>>vvv<<<^^^
output akan:
+----+ +----+
| | |>>>v|
| ++ | |^++v|
| ++ | because |^++v|
| | |^<<<|
+----+ +----+
Testcases
>>>>>>vvvvv<<<<^^^>>v
+-------+
| |
+-+---+ |
| | |
| + | |
| +-+ |
| |
+-----+
^^^^^vvv<<<^^vv>>>>>>>>vv>><<^^^^v>>>>v^<^
+-+
+-+| | +-++-+
| || | | ++ ++
| ++ +-+ |
| +-+ |
+--+ +-+ +-+-+
| | | |
+-+ +---+
Karena tantangan kode golf, kode terpendek menang.
Selamat bermain golf.
EDIT Maaf untuk keterlambatan mengedit, saya tidak punya banyak waktu baru-baru ini.
Peta dihasilkan berdasarkan pergerakan. Seharusnya hanya berisi koridor yang dikunjungi selama berjalan. Karenanya menciptakan satu ruangan besar tidak akan menjadi jawaban yang valid.
Ada tiga simbol yang valid di peta:
|
dinding vertikal|
dinding horizontal+
persimpangan dinding vertikal dan horizontal.
Panjang maksimum jalur adalah 255 karakter (tetapi jika Anda bisa, jangan batasi diri Anda sendiri).
Lebih banyak kasus uji:
><><><><
+--+
| |
+--+
>^<v
+--+
| |
| |
+--+
Saya harap sekarang semuanya jelas.
vvv>>^^^<<
akan dihasilkan (melintasi? Pipa?)Jawaban:
Javascript (ES6),
261254243 byteJSFiddle
sumber
return
dengan mengganti;
dengan,
dan{}
dengan()
for
loop di sana yang tidak bisa disematkan dengan cara itu.{
denganeval("
dan}
dengan")
untuk menghapus codegolf kembali.stackexchange.com/a/80967/41042'\\n'
olah saya melakukannya. Jika saya hitung dengan benar, itu sebenarnya mengarah ke +1 byte. Atau adakah cara yang lebih baik untuk menanamkan linebreak dalam eval?\n
karena string template mendukung baris baru secara literal, tetapi itu masih akan meninggalkannya pada jumlah byte yang sama. Oh wellC, 246 byte
Mengambil input sebagai karakter yang terpisah, misalnya:
Atau lebih mudahnya, format ini (tanpa tanda kutip!):
Atau untuk input acak (sangat tidak efisien):
Dan akhirnya, menggunakan
awk
untuk memotong hasilnya berarti kita bisa menjadi lebih besar:Output ke stdout. Menggunakan fakta bahwa padding diperbolehkan di sekitar peta (menghasilkan peta yang memiliki panjang tepi 2 * n + 1, menempatkan posisi akhir di tengah).
Kerusakan
Ini bekerja dengan mengulangi argumen secara terbalik dan bergerak mundur. Sebenarnya menggunakan fakta bahwa arg 0 adalah nama program; tidak peduli apa namanya, tetapi memungkinkan kita untuk mengunjungi sel awal dan terakhir (serta semua sel di antaranya) tanpa perlu penanganan khusus.
sumber