(Questa sfida è molto simile, ma questa sfida attuale ha ulteriori complicazioni.)
Immagina una stanza bidimensionale, dove le pareti sono placcate con specchi piatti.
Improvvisamente, un raggio di luce colpisce la stanza, dove manca un pezzo di muro! Il raggio di luce danza intorno alla stanza, viene riflesso dagli specchi a parete e alla fine lascia la stanza.
La logica
Si sono date 5 variabili: W, H, X, Y e Z .
Ora, cosa significano?
W, H è la dimensione della stanza (comprese le pareti), con W come larghezza e H come altezza.
X, Y è la coordinata in cui il muro ha il foro. Puoi presumere che questo si trovi sempre su una piastrella da parete. Le coordinate sono basate su 0, con l'asse X che punta a destra e l'asse Y che punta verso il basso.
Z è un singolo carattere, che rappresenta la direzione in cui la luce cade nella stanza, o \o /.
La stanza deve essere costruita con i seguenti personaggi:
|per pareti orizzontali-per pareti verticali+per gli angoli
Esempio: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Ora che abbiamo una stanza, lasciamo distruggere una delle piastrelle del muro, così un raggio di luce cade nella stanza. I raggi di luce sono linee diagonali, rappresentate da \e /caratteri.
Sostituiamo la piastrella da parete su X = 2, Y = 0 con un \raggio di luce.
+-\---+
| |
| |
+-----+
La luce in arrivo viaggia in diagonale attraverso la stanza fino a colpire una parete a specchio. Se viene colpito un muro, la direzione si inverte lungo l'asse del muro e il raggio prosegue.
+-\---+
|\ \/\|
| \/\/|
+-----+
In questo esempio, il raggio di luce arriva a un punto in cui viene colpito un angolo del muro, il che implica che il raggio viene completamente invertito e si sposta completamente indietro, lasciando infine la stanza.
Il tuo compito
Scrivi un programma che stampa la stanza e l'intero percorso del raggio luminoso, fino a quando non lascia di nuovo la stanza o si ripete in un ciclo infinito.
Ingresso
L'input può essere ricevuto in qualsiasi formato ragionevole, ma deve includere i 4 numeri interi W, H, X, Y e il carattere Z, ad esempio [10, 8, 0, 3, \].
Puoi presumere che:
- W, H> = 3
- X, Y si trovano sempre su un muro
- Z sarà in grado di contenere solo i valori
\e/.
Produzione
Puoi decidere se restituire una stringa o direttamente in output stdout.
Deve includere la parete della stanza e il raggio di luce (definito dai caratteri ASCII sopra).
Regole
- Sono vietate le scappatoie standard .
- Questo è code-golf , quindi vince il codice più breve in byte, in qualsiasi lingua.
- Sono consentiti tutti i linguaggi di codifica creati prima della pubblicazione di questa sfida.
Esempi
Ingresso: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Ingresso: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Input: [10, 8, 0, 3, \] (Esempio di un loop infinito che non lascerà più la stanza.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
In bocca al lupo!