Obbiettivo
In questa competizione, ti viene data una stanza a caso con dentro una candela. L'obiettivo è scrivere il programma più breve (questo è il golf) che determina quali parti della stanza sono illuminate dalla candela, sostituendo le macchie scure con quelle @di. Il programma dovrebbe prendere una stanza da STDIN, con l'output stampato su STDOUT.
Esempio di input / room
+------+
| C |
| +--+
| \ |
+---------+
La candela è rappresentato con un C, e le pareti / specchi sono rappresentati con |, -, /o \. Le pareti stesse sono specchi. Gli angoli della stanza sono rappresentati con a +.
Le stanze non avranno mai pareti diagonali e la luce non potrà mai uscire dalla stanza.
Inoltre, il primo personaggio su una linea sarà sempre parte del muro fuori dalla stanza. L'ultimo carattere assoluto su ogni riga sarà la parete opposta della stanza. Nessun personaggio tra questi due sarà fuori dalla stanza.
Luce e riflessione
La candela emette otto fasci di luce (simili a laser) in otto direzioni di base: N, S, E, W, NE, SE, SW e NW. Questi raggi di luce rimbalzano sugli specchi come descritto di seguito:
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 -rappresenta la luce che viene assorbita. La luce viene sempre assorbita da C o +. È importante notare che le luci si riflettono su uno specchio solo quando occupa lo stesso spazio dello specchio. Queste regole sono molto più facili da capire quando si disegna il riflesso sulla carta.
Esempio di output
Come output, il programma dovrebbe stampare un'immagine della stanza illuminata, con punti scuri scritti come una @, punti luce lasciati vuoti e specchi non interessati. Per l'esempio sopra, l'output sarebbe:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Ciò significa che, se hai estratto i raggi di luce, questi non raggiungeranno mai gli spazi contrassegnati da @.
Più esempi
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@?