Mục tiêu
Trong cuộc thi này, bạn được cung cấp một căn phòng ngẫu nhiên với một cây nến bên trong. Mục tiêu là viết chương trình ngắn nhất (đây là golf) để xác định phần nào của căn phòng được chiếu sáng bởi ngọn nến, bằng cách thay thế các điểm tối bằng @
's. Chương trình sẽ lấy một phòng từ STDIN, với đầu ra được in thành STDOUT.
Ví dụ đầu vào / phòng
+------+
| C |
| +--+
| \ |
+---------+
Ngọn nến được thể hiện với một C
, và các bức tường / cạo được đại diện với |
, -
, /
, hoặc \
. Các bức tường là gương. Các góc của căn phòng được đại diện với a +
.
Các phòng sẽ không bao giờ có tường chéo và ánh sáng sẽ không bao giờ có thể thoát ra khỏi phòng.
Ngoài ra, nhân vật đầu tiên trên một dòng luôn luôn là một phần của bức tường ra khỏi phòng. Ký tự cuối cùng tuyệt đối trên mỗi dòng sẽ là bức tường đối diện của căn phòng. Không có nhân vật giữa hai người này sẽ ở bên ngoài phòng.
Ánh sáng và sự phản chiếu
Cây nến phát ra tám chùm ánh sáng (giống như tia laser) theo tám hướng cơ bản: N, S, E, W, NE, SE, SW và NW. Những tia sáng này bật ra khỏi gương như được mô tả dưới đây:
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 -
đại diện cho ánh sáng được hấp thụ. Ánh sáng luôn bị hấp thụ bởi C's hoặc + 's. Điều quan trọng cần lưu ý là đèn chỉ phản chiếu từ gương khi nó chiếm cùng một không gian với gương. Những quy tắc này dễ hiểu hơn nhiều khi bạn vẽ hình phản chiếu ra giấy.
Ví dụ đầu ra
Khi xuất ra, chương trình sẽ in một hình ảnh của căn phòng được chiếu sáng, với các điểm tối được viết dưới dạng @
, các điểm sáng để trống và gương không bị ảnh hưởng. Đối với ví dụ trên, đầu ra sẽ là:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Điều này có nghĩa là, nếu bạn rút ra các chùm ánh sáng, chúng sẽ không bao giờ chạm tới các khoảng trống được đánh dấu @
.
Thêm ví dụ
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
?