Gagang pintu bagus dan semuanya, tetapi ketika Anda membuka pintu, pintu itu selalu mengelupas. Saya ingin Anda mengambil input seni ASCII dari sebuah ruangan, seperti ini:
+---------+--X --X --+-----+
| \ \ |\ | \ |
| \ \ | \ | \|
| X | \ | X
| / | | \ X
| / | \ /
| / | \ / |
+---X --+-------X------+-----+
Dan output ruangan dengan doorstop, seperti ini:
+---------+--X --X --+-----+
| \ . \ |\ | \.|
| \ \ | \ .| \|
| X | \ | X
| / | |. \ X
| / .| \ /
|. / | .\ / |
+---X --+-------X------+-----+
Spesifikasi:
- Ruang ASCII (input) akan terdiri dari
+
,-
, dan|
. Karakter-karakter ini murni kosmetik; mereka semua bisa saja+
tetapi itu akan terlihat mengerikan. Ini juga akan berisi engsel (X
) dan pintu (/
atau\
). - Pintu terdiri dari
/
atau\
. Mulai dari karakter "engsel", yaituX
, mereka akan langsung diagonal (perubahan 1 inx
dan 1 iny
) untuk 2 atau lebih unit (karakter). Untuk menemukan di mana harus meletakkan palang pintu untuk sebuah pintu (selalu ada hanya satu palang pintu per pintu), temukan pintu untuk pintu tersebut. Pintu akan selalu dimulai pada satu engsel, dan pergi dengan jumlah ruang yang sama dengan panjang pintu naik, turun, kiri, atau kanan dari sana. Ruang selanjutnya setelah itu akan selalu menjadi tembok. Misalnya, di pintu ini, pintu ditandai oleh
D
s:\ \ ---DDX-----
Satu pintu ditemukan, cari tahu apakah Anda harus pergi searah jarum jam atau berlawanan arah jarum jam untuk mencapai pintu. Misalnya, dalam contoh pintu di atas, Anda harus bergerak searah jarum jam, dan yang ini, Anda harus berlawanan arah jarum jam:
\ <- \ ) -----X ---
Setelah Anda tahu ke mana harus pergi, teruslah ke sana (mengabaikan pintu) sampai Anda mencapai dinding.
Berikut visualisasi untuk contoh pintu di atas:
Biru adalah pintu, oranye menemukan bahwa Anda harus pergi searah jarum jam, dan merah terus berjalan searah jarum jam sampai dinding tercapai.
Setelah Anda mencapai dinding, pergi ruang (panjang pintu) dari engsel (
X
) di dinding itu, pindahkan satu ruang dari dinding ke arah pintu (sehingga Anda tidak menempatkan palang pintu tepat di dinding), dan masukkan.
sana. Berikut ini contoh pintu yang sama yang menunjukkan bagaimana palang pintu dipasang:\ \ . ---DDX12---
Ulangi untuk setiap pintu, dan hasilkan hasilnya! Gunakan contoh input di bagian atas posting ini sebagai test case untuk memeriksa apakah program Anda valid.
Perhatikan bahwa Anda tidak harus memegang pintu yang tidak muat di dindingnya, seperti:
| / | / | / | / +-X --
Atau:
/ / / +-X -- | |
- Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang.
Jawaban:
Scala, 860 byte
Golf :
Tidak golf :
Menggunakan OOP jelas merupakan pendekatan yang salah di sini, di belakang. Jika saya bisa melakukannya lagi saya pasti akan pergi dengan sekelompok tabel kebenaran hardcode.
sumber