Reflexiones ASCII en una caja
Probablemente todos conozcan la Ley de la Reflexión , en este desafío visualizarán la trayectoria de una pelota en una caja.
Relacionado: Animación ASCII Ball in Box y ASCII Doodling: Laser in a Box
Tarea
Te dan tres pares enteros W,H, x,yy dx,dyel primero representa el tamaño de la caja, el segundo la posición inicial y el tercer par es la dirección en la que la pelota comienza a moverse.
La tarea es visualizar el movimiento de la pelota hasta que deja de rodar, esto sucede tan pronto como la pelota está en una posición que estaba antes o toca una esquina.
El personaje *deberá visualizar la trayectoria de la pelota y +marcar su posición final, el resto del cuadro debe consistir en (espacio en blanco).
Ejemplos
Para exponerlo un poco más claro, en estos ejemplos _representará un espacio en blanco. Además, las etapas intermedias solo están aquí para aclarar, solo tendrá que generar la última etapa, estos ejemplos están 1indexados.
Dado W = 3, H = 5, x = 3, y = 2y dx = -1, dy = 1:
___ ___ ___ ___
__* __* __* __*
___ -> _*_ -> _*_ -> _+_
___ *__ *__ *_*
___ ___ _*_ _*_
- La pelota comienza en el punto
(3,2)y - se mueve en dirección
(-1,1), golpea la pared(1,4)y - se refleja, nueva dirección es
(1,1). Golpea la pared nuevamente a las(2,5) - donde se pone se refleja. La nueva dirección es
(1,-1)y golpea la pared inmediatamente en(3,4), - nuevamente se refleja en la dirección
(-1,-1). Ahora viajaría a través de puntos(2,3),(1,2), reflejados, etc. pero como ya visitó la posición,(2,3)se detiene allí.
Este ejemplo demuestra qué sucede si una pelota golpea una esquina. Para esto deja W = 7, H = 3, x = 1, y = 3y dx = 1, dy = -1:
_______ __*____ __*____ __*___+
_______ -> _*_____ -> _*_*___ -> _*_*_*_
*______ *______ *___*__ *___*__
- La posición de inicio es
(1,3), - la pelota ahora viaja en dirección
(1,-1)hasta que golpea la pared en(3,1) - donde se refleja en la nueva dirección
(1,1). - En
(5,3)esto se refleja y viaja en la nueva dirección(1,-1). Se detiene abruptamente(7,1)porque es una esquina.
Dado W = 10, H = 6, x = 6, y = 6y dx = 1, dy = 1:
__________ __________ ________*_ ________*_ ________*_ __*_____*_ __*_____*_
__________ _________* _________* _______*_* _______*_* _*_____*_* _*_*___*_*
__________ -> ________*_ -> ________*_ -> ______*_*_ -> *_____*_*_ -> *_____*_*_ -> *___*_*_*_
__________ _______*__ _______*__ _____*_*__ _*___*_*__ _*___*_*__ _*___+_*__
__________ ______*___ ______*___ ____*_*___ __*_*_*___ __*_*_*___ __*_*_*___
_____*____ _____*____ _____*____ ___*_*____ ___*_*____ ___*_*____ ___*_*____
Especificación de entrada
La entrada consta de los tres pares de enteros W,H, x,yy dx,dypuede tomar la entrada en cualquier formato que tenga más sentido para su lenguaje de programación y el orden no importa. Sin embargo, la entrada aceptada no debe codificar más información de la que contienen estos pares (consulte esta respuesta para ver un ejemplo).
W,H >= 1x,yestán1indexados (1 <= x <= Wy1 <= y <= H) o0indexados (0 <= x < Wy0 <= y < H), especifique qué indexación eligiódx,dyson siempre-1o1
La entrada inválida puede ser ignorada.
Especificación de salida
- No se permiten espacios en blanco iniciales
- Los espacios en blanco finales pueden omitirse
- Los espacios en blanco finales no están permitidos si no se ajustan a la caja
- Se permiten nuevas líneas finales ( después de todas las líneas relacionadas con la salida)
Tomemos el primer ejemplo:
(good by 2)
__*
_+ (good by 2)
*_*_ (bad by 3)
(bad by 4)
_*_
(good by 4)
Casos de prueba
Suponiendo que la entrada tiene el formato (W,H,x,y,dx,dy)y 1se eligió la indexación, aquí hay algunos casos de prueba (¡nuevamente _está aquí para representar espacios en blanco!):
Entrada: 1,1,1,1,1,1
Salida:
+
Entrada: 3,3,3,3,1,1
Salida:
___
___
__+
Entrada: 3,3,3,3, -1, -1
Salida:
+__
_*_
__*
Entrada: 7,3,1,3,1, -1
Salida:
__*___+
_*_*_*_
*___*__
Entrada: 10,6,6,6,1,1
Salida:
__*_____*_
_*_*___*_*
*___*_*_*_
_*___+_*__
__*_*_*___
___*_*____
Entrada: 21,7,6,4, -1, -1
Salida:
__*_______*_______*__
_*_*_____*_*_____*_*_
*___*___*___*___*___*
_*___*_*_____*_*___*_
__*___*_______+___*__
___*_*_________*_*___
____*___________*____
Este es el código de golf , por lo que gana el programa / función más corto, pero se aprecia cualquier esfuerzo.
1restricción -indexed si te gusta (?) Sobre la primera pregunta, no está seguro de lo que quieres decir pero suena bien. Supongo que cualquier cosa que sea una biyección ( {-1,1}x{-1,1} ≡ "Your space") sería buena.