Stellen Sie sich einen zweidimensionalen Raum vor, in dem die Wände mit flachen Spiegeln überzogen sind.
Plötzlich fällt ein Lichtstrahl in den Raum, in dem ein Stück Wand fehlt! Der Lichtstrahl tanzt durch den Raum, wird von den Wandspiegeln reflektiert und verlässt schließlich den Raum wieder.
Die Logik
Sie sind 5 Variablen gegeben: W, H, X, Y und Z .
Was meinen sie jetzt?
W, H ist die Größe des Raums (einschließlich der Wände), wobei W die Breite und H die Höhe ist.
X, Y ist die Koordinate, an der die Wand das Loch hat. Sie können davon ausgehen, dass sich dies immer auf einer Wandfliese befindet. Koordinaten basieren auf 0, wobei die X-Achse nach rechts und die Y-Achse nach unten zeigt.
Z ist ein einzelnes Zeichen, das die Richtung angibt, in die das Licht in den Raum fällt, entweder \
oder /
.
Der Raum muss aus folgenden Zeichen bestehen:
|
für waagerechte Wände-
für senkrechte Wände+
für ecken
Beispiel: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Nachdem wir einen Raum haben, können wir eine der Wandfliesen zerstören, sodass ein Lichtstrahl in den Raum fällt. Lichtstrahlen sind diagonale Linien, die durch \
und /
Zeichen dargestellt werden.
Ersetzen wir die Wandfliese bei X = 2, Y = 0 durch einen \
Lichtstrahl.
+-\---+
| |
| |
+-----+
Das einfallende Licht wandert diagonal durch den Raum, bis es auf eine Spiegelwand trifft. Wenn eine Wand getroffen wird, kehrt sich die Richtung entlang der Achse der Wand um und der Strahl wandert weiter.
+-\---+
|\ \/\|
| \/\/|
+-----+
In diesem Beispiel erreicht der Lichtstrahl einen Punkt, an dem eine Ecke der Wand getroffen wird, was dazu führt, dass sich der Strahl vollständig umkehrt und den gesamten Rückweg zurücklegt und schließlich den Raum verlässt.
Deine Aufgabe
Schreiben Sie ein Programm, das den Raum und den gesamten Weg des Lichtstrahls druckt, bis er den Raum wieder verlässt oder sich zu einer Endlosschleife wiederholt.
Eingang
Eingaben können in jedem vernünftigen Format empfangen werden, sie müssen jedoch beispielsweise die vier Ganzzahlen W, H, X, Y und das Zeichen Z enthalten [10, 8, 0, 3, \]
.
Sie können davon ausgehen, dass:
- W, H> = 3
- X, Y befinden sich immer an einer Wand
- Z kann nur die Werte
\
und enthalten/
.
Ausgabe
Sie können entscheiden, ob Sie eine Zeichenfolge zurückgeben oder direkt an ausgeben stdout
.
Es muss die Raumwand und den Lichtstrahl enthalten (definiert durch die obigen ASCII-Zeichen).
Regeln
- Standard Lücken sind verboten.
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache.
- Alle Codierungssprachen, die vor der Veröffentlichung dieser Herausforderung erstellt wurden, sind zulässig.
Beispiele
Eingang: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Eingang: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Eingabe: [10, 8, 0, 3, \]
(Beispiel einer Endlosschleife, die den Raum nicht wieder verlässt.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Viel Glück!
-v -sl
, wird tatsächlich der übersetzte prägnante Code wie gedruckt ausgeführt. Dies hängt natürlich davon ab, ob der Deverbosifier den richtigen prägnanten Code generiert. Andernfalls schlägt der generierte Code fehl, obwohl der ursprüngliche ausführliche Code technisch korrekt war.