Tujuan
Dalam kompetisi ini, Anda diberi ruang acak dengan satu lilin di dalamnya. Tujuannya adalah untuk menulis program terpendek (ini golf) yang menentukan bagian mana dari ruangan yang diterangi oleh lilin, dengan mengganti titik-titik gelap dengan @
's. Program harus mengambil ruang dari STDIN, dengan output dicetak ke STDOUT.
Contoh Input / Kamar
+------+
| C |
| +--+
| \ |
+---------+
Lilin diwakili dengan C
, dan dinding / cermin diwakili dengan |
, -
, /
, atau \
. Dindingnya sendiri adalah cermin. Sudut-sudut ruangan diwakili dengan a +
.
Kamar tidak akan pernah memiliki dinding diagonal, dan cahaya tidak akan pernah bisa keluar dari ruangan.
Juga, karakter pertama pada sebuah garis selalu akan menjadi bagian dari dinding di luar ruangan. Karakter terakhir absolut pada setiap baris akan menjadi dinding seberang ruangan. Tidak ada karakter di antara keduanya yang akan berada di luar ruangan.
Cahaya dan Refleksi
Lilin memancarkan delapan (seperti laser) cahaya dalam delapan arah dasar: N, S, E, W, NE, SE, SW, dan NW. Sinar cahaya ini memantul dari cermin seperti yang dijelaskan di bawah ini:
Old Direction of Travel | Mirror | New Direction
N S E W NE SE SW NW / E W N S -- -- -- --
N S E W NE SE SW NW \ W E S N -- -- -- --
N S E W NE SE SW NW | - - - - NW SW NE SW
N S E W NE SE SW NW - - - - - SE NE SW NE
A -
mewakili cahaya yang diserap. Cahaya selalu diserap oleh C atau +. Penting untuk dicatat bahwa lampu memantulkan cermin hanya ketika menempati ruang yang sama dengan cermin. Aturan-aturan ini jauh lebih mudah dipahami ketika Anda menggambar refleksi di atas kertas.
Contoh Output
Sebagai output, program harus mencetak gambar ruangan yang diterangi, dengan bintik-bintik gelap ditulis sebagai @
, bintik-bintik terang dibiarkan kosong, dan cermin tidak terpengaruh. Untuk contoh di atas, hasilnya adalah:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Ini berarti bahwa, jika Anda mengeluarkan sinar cahaya, mereka tidak akan pernah mencapai ruang yang ditandai @
.
Lebih banyak contoh
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
juga?Jawaban:
Python, 292 karakter
Membaca di dalam ruangan, membuatnya persegi panjang, lalu berjalan keluar dari lilin ke segala arah. M berisi karakter cermin aktif dan efeknya (
/\
untuk arah mata angin,|-
untuk yang lain)Dapat menangani kamar hingga 97 karakter.
sumber
c - 504
Bergantung pada semantik memanggil fungsi standar K&R. Implementasi sangat lurus ke depan kecuali untuk hal-hal biola dengan memantulkan sinar.
Tidak disatukan
Validasi
sumber