(To wyzwanie jest bardzo podobne, ale obecne wyzwanie ma dodatkowe komplikacje.)
Wyobraź sobie dwuwymiarowy pokój, w którym ściany są pokryte płaskimi lustrami.
Nagle promień światła uderza w pokój, w którym brakuje kawałka ściany! Wiązka światła tańczy wokół pokoju, odbijana przez lustra ścienne i ostatecznie opuszczając pokój.
Logika
Otrzymaniem 5 zmiennych: W, H, X, Y i Z .
Co one oznaczają?
W, H jest rozmiarem pomieszczenia (w tym ścian), przy czym W oznacza szerokość, a H wysokość.
X, Y jest współrzędną, w której ściana ma otwór. Możesz założyć, że zawsze znajduje się na kafelku ściennym. Współrzędne są oparte na 0, z osią X skierowaną w prawo, a oś Y skierowaną w dół.
Z oznacza jeden znak, co oznacza kierunek, w którym światło wchodzi do pomieszczenia, albo \czy /.
Pokój musi być zbudowany z następujących postaci:
|do ścian poziomych-do ścian pionowych+na zakręty
Przykład: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Teraz, kiedy mamy pokój, zniszczmy jeden z kafelków na ścianie, więc promień światła wpada do pokoju. Wiązki światła to ukośne linie reprezentowane przez znaki \i /.
Zastąpmy płytkę ścienną przy X = 2, Y = 0 \wiązką światła.
+-\---+
| |
| |
+-----+
Przychodzące światło wędruje po przekątnej przez pokój, aż trafi w lustrzaną ścianę. W przypadku uderzenia w ścianę kierunek odwraca się wzdłuż osi ściany, a wiązka przesuwa się dalej.
+-\---+
|\ \/\|
| \/\/|
+-----+
W tym przykładzie wiązka światła dociera do punktu, w którym uderza w róg ściany, co powoduje, że wiązka zostaje całkowicie odwrócona i cofa się całkowicie, ostatecznie opuszczając pomieszczenie.
Twoje zadanie
Napisz program, który drukuje pokój i całą ścieżkę wiązki światła, dopóki nie opuści pokoju ponownie lub nie powtórzy się w nieskończonej pętli.
Wejście
Wejście może być umieszczona w dowolnym odpowiednim formacie, lecz musi obejmować liczby całkowite w 4, H, X, Y i Z postaci, np [10, 8, 0, 3, \].
Możesz założyć, że:
- W, H> = 3
- X, Y zawsze znajdują się na ścianie
- Z będzie mógł zawierać tylko wartości
\i/.
Wynik
Możesz zdecydować, czy zwrócisz ciąg znaków, czy bezpośrednio wyjdziesz na stdout.
Musi zawierać ścianę pokoju i wiązkę światła (zdefiniowane przez znaki ASCII powyżej).
Zasady
- Standardowe luki są zabronione.
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach, w dowolnym języku.
- Wszystkie języki kodowania, które zostały utworzone przed publikacją tego wyzwania, są dozwolone.
Przykłady
Wejście: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Wejście: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Wejście: [10, 8, 0, 3, \] (Przykład nieskończonej pętli, która nie opuści pokoju ponownie.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Powodzenia!