(Este desafío es muy similar, pero este desafío actual tiene complicaciones adicionales).
Imagine una habitación bidimensional, donde las paredes están chapadas con espejos planos.
De repente, un rayo de luz incide en la habitación, donde falta un pedazo de pared. El rayo de luz baila alrededor de la habitación, se refleja en los espejos de las paredes y, finalmente, sale de la habitación nuevamente.
La lógica
Se le da 5 variables: W, H, X, Y y Z .
Ahora, ¿qué significan?
W, H es el tamaño de la habitación (incluidas las paredes), siendo W ancho y H altura.
X, Y es la coordenada en la que el muro tiene el agujero. Puede suponer que esto siempre se encuentra en una baldosa de pared. Las coordenadas están basadas en 0, con el eje X apuntando hacia la derecha y el eje Y apuntando hacia abajo.
Z es un solo personaje, que representa la dirección en que la luz cae en la habitación, ya sea \
o /
.
La sala debe estar formada por los siguientes personajes:
|
para paredes horizontales-
para paredes verticales+
para rincones
Ejemplo: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Ahora que tenemos una habitación, destruyamos uno de los azulejos de la pared, para que un rayo de luz caiga en la habitación. Los rayos de luz son líneas diagonales, representadas por \
y /
caracteres.
Reemplacemos el azulejo de la pared en X = 2, Y = 0 con un \
haz de luz.
+-\---+
| |
| |
+-----+
La luz entrante viaja diagonalmente a través de la habitación hasta que golpea una pared de espejo. Si se golpea una pared, la dirección se invierte a lo largo del eje de la pared y la viga se desplaza.
+-\---+
|\ \/\|
| \/\/|
+-----+
En este ejemplo, el rayo de luz llega a un punto donde se golpea una esquina de la pared, lo que inflige que el rayo se invierte por completo y viaja hacia atrás, y finalmente sale de la habitación.
Tu tarea
Escriba un programa que imprima la habitación y el camino completo del haz de luz, hasta que salga de la habitación nuevamente o se repita en un bucle infinito.
Entrada
La entrada puede recibirse en cualquier formato razonable, pero debe incluir los 4 enteros W, H, X, Y y el carácter Z, por ejemplo [10, 8, 0, 3, \]
.
Puede suponer que:
- W, H> = 3
- X, Y siempre se encuentran en una pared
- Z solo podrá contener los valores
\
y/
.
Salida
Puede decidir si devuelve una cadena o directamente a la salida stdout
.
Tiene que incluir la pared de la habitación y el haz de luz (definido por los caracteres ASCII anteriores).
Reglas
- Las lagunas estándar están prohibidas.
- Este es el código de golf , por lo que gana el código más corto en bytes, en cualquier idioma.
- Todos los lenguajes de codificación que se crearon antes de la publicación de este desafío están permitidos.
Ejemplos
Entrada: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Entrada: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Entrada: [10, 8, 0, 3, \]
(Ejemplo de un bucle infinito que no volverá a salir de la habitación).
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
¡Buena suerte!