Tor
In diesem Wettbewerb erhalten Sie einen zufälligen Raum mit einer Kerze im Inneren. Das Ziel ist es, das kürzeste Programm (Golf) zu schreiben, das bestimmt, welche Teile des Raumes von der Kerze beleuchtet werden, indem die dunklen Flecken durch @
's ersetzt werden. Das Programm sollte einen Raum von STDIN einnehmen, wobei die Ausgabe auf STDOUT gedruckt wird.
Beispiel Eingabe / Raum
+------+
| C |
| +--+
| \ |
+---------+
Die Kerze ist mit a bezeichnet C
, und die Wände / Spiegel sind mit dargestellt |
, -
, /
, oder \
. Die Wände selbst sind Spiegel. Die Ecken des Raumes sind mit einem dargestellt +
.
Räume werden niemals diagonale Wände haben und Licht wird niemals aus dem Raum entweichen können.
Außerdem wird das erste Zeichen in einer Zeile immer Teil der Wand außerhalb des Raums sein. Das absolut letzte Zeichen in jeder Zeile ist die gegenüberliegende Wand des Raums. Keine Charaktere zwischen diesen beiden werden außerhalb des Raumes sein.
Licht und Reflexion
Die Kerze sendet acht (laserähnliche) Lichtstrahlen in acht Hauptrichtungen aus: N, S, E, W, NE, SE, SW und NW. Diese Lichtstrahlen werden wie folgt von den Spiegeln reflektiert:
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 steht -
für das Licht, das absorbiert wird. Licht wird immer von C oder + absorbiert. Es ist wichtig zu beachten, dass das Licht nur dann von einem Spiegel reflektiert wird, wenn es denselben Raum wie der Spiegel einnimmt. Diese Regeln sind viel einfacher zu verstehen, wenn Sie die Reflexion auf Papier zeichnen.
Beispielausgabe
Als Ausgabe sollte das Programm ein Bild des beleuchteten Raums mit dunklen Flecken als @
, leeren hellen Flecken und unbeeinflussten Spiegeln drucken. Für das obige Beispiel wäre die Ausgabe:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Dies bedeutet, dass wenn Sie die Lichtstrahlen herausziehen, diese niemals die mit gekennzeichneten Stellen erreichen @
.
Mehr Beispiele
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
?Antworten:
Python, 292 Zeichen
Liest im Raum, macht ihn rechteckig und geht dann in alle Richtungen aus der Kerze heraus. M enthält die aktiven Spiegelzeichen und ihre Wirkung (
/\
für die Himmelsrichtungen,|-
für die anderen)Kann Räume mit einer Breite von bis zu 97 Zeichen bearbeiten.
quelle
c - 504
Verlässt sich auf die K & R-Standardfunktionsaufrufsemantik. Sehr unkomplizierte Implementierung, bis auf das Geigenspiel mit den Strahlen.
Ungolfed
Validierung
quelle