(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!
-v -sl
to tak naprawdę jest przetłumaczony zwięzły kod po wydrukowaniu, który zostanie wykonany. Zależy to oczywiście od generatora poprawek generującego poprawny zwięzły kod, ponieważ jeśli nie, wygenerowany kod zawiedzie, mimo że oryginalny pełny kod był technicznie poprawny.