(Tantangan ini sangat mirip, tetapi tantangan saat ini memiliki komplikasi tambahan.)
Bayangkan sebuah ruangan 2 dimensi, di mana dindingnya dilapisi dengan cermin datar.
Tiba-tiba, seberkas cahaya menghantam ruangan, tempat sepotong dinding hilang! Sinar lampu menari di sekitar ruangan, dipantulkan oleh cermin dinding, dan akhirnya meninggalkan ruangan lagi.
Logika
Anda diberikan 5 variabel: W, H, X, Y dan Z .
Sekarang, apa artinya itu?
W, H adalah ukuran ruangan (termasuk dinding), dengan W menjadi lebar dan H menjadi tinggi.
X, Y adalah koordinat bahwa dinding memiliki lubang. Anda dapat mengasumsikan bahwa ini selalu terletak di ubin dinding. Koordinat berbasis 0, dengan sumbu X mengarah ke kanan dan sumbu Y mengarah ke bawah.
Z adalah karakter tunggal, mewakili arah bahwa cahaya jatuh ke dalam ruangan, baik \
atau /
.
Kamar harus dibangun dari karakter berikut:
|
untuk dinding horizontal-
untuk dinding vertikal+
untuk sudut
Contoh: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Sekarang kita memiliki ruangan, mari kita hancurkan salah satu ubin dinding, jadi seberkas cahaya jatuh ke dalam ruangan. Balok cahaya adalah garis diagonal, diwakili oleh \
dan /
karakter.
Mari kita ganti ubin dinding di X = 2, Y = 0 dengan \
seberkas cahaya.
+-\---+
| |
| |
+-----+
Cahaya yang masuk bergerak secara diagonal melintasi ruangan sampai menyentuh dinding cermin. Jika dinding tertabrak, arah berbalik sepanjang sumbu dinding, dan sinar berjalan.
+-\---+
|\ \/\|
| \/\/|
+-----+
Dalam contoh ini, sinar cahaya sampai ke titik di mana sudut dinding dipukul, yang menimbulkan bahwa balok akan terbalik sepenuhnya dan bergerak sepanjang jalan kembali, akhirnya meninggalkan ruangan.
Tugas Anda
Tulis sebuah program yang mencetak ruangan dan seluruh jalur berkas cahaya, sampai ia meninggalkan ruangan lagi atau mengulangi menjadi loop yang tak terbatas.
Memasukkan
Input dapat diterima dalam format apa pun yang masuk akal, tetapi harus menyertakan 4 bilangan bulat W, H, X, Y, dan karakter Z, misalnya [10, 8, 0, 3, \]
.
Anda dapat berasumsi bahwa:
- W, H> = 3
- X, Y selalu terletak di dinding
- Z hanya akan dapat memuat nilai
\
dan/
.
Keluaran
Anda dapat memutuskan apakah Anda mengembalikan string atau langsung menghasilkan stdout
.
Itu harus menyertakan dinding ruangan dan berkas cahaya (ditentukan oleh karakter ASCII di atas).
Aturan
- Celah standar dilarang.
- Ini adalah kode-golf , jadi kode terpendek dalam byte, dalam bahasa apa pun, menang.
- Semua bahasa pengkodean yang dibuat sebelum publikasi tantangan ini diizinkan.
Contohnya
Memasukkan: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Memasukkan: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Input: [10, 8, 0, 3, \]
(Contoh loop tak terbatas yang tidak akan meninggalkan ruangan lagi.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Semoga berhasil!
-v -sl
maka sebenarnya kode ringkas yang diterjemahkan seperti yang dicetak yang dijalankan. Ini tentu saja tergantung pada deverbosifier yang menghasilkan kode ringkas yang benar, karena jika tidak, maka kode yang dihasilkan gagal, walaupun kode verbose asli secara teknis benar.