Objetivo
En esta competencia, se te da una habitación aleatoria con una vela adentro. El objetivo es escribir el programa más corto (esto es golf) que determina qué partes de la habitación se iluminan con la vela, reemplazando los puntos oscuros con @
's'. El programa debe tomar una habitación de STDIN, con la salida impresa en STDOUT.
Ejemplo de entrada / sala
+------+
| C |
| +--+
| \ |
+---------+
La vela se representa con una C
, y las paredes / espejos están representados con |
, -
, /
, o \
. Las paredes mismas son espejos. Las esquinas de la sala están representadas con a +
.
Las habitaciones nunca tendrán paredes diagonales, y la luz nunca podrá escapar de la habitación.
Además, el primer personaje en una línea siempre será parte de la pared de la habitación. El último carácter absoluto en cada línea será la pared opuesta de la habitación. Ningún personaje entre estos dos va a estar fuera de la habitación.
Luz y reflejo
La vela emite ocho haces de luz (tipo láser) en ocho direcciones básicas: N, S, E, W, NE, SE, SW y NW. Estos rayos de luz rebotan en los espejos como se describe a continuación:
Old Direction of Travel | Mirror | New Direction
N S E W NE SE SW NW / E W N S -- -- -- --
N S E W NE SE SW NW \ W E S N -- -- -- --
N S E W NE SE SW NW | - - - - NW SW NE SW
N S E W NE SE SW NW - - - - - SE NE SW NE
A -
representa la luz que se absorbe. La luz siempre es absorbida por C's o + 's. Es importante tener en cuenta que las luces se reflejan en un espejo solo cuando ocupa el mismo espacio que el espejo. Estas reglas son mucho más fáciles de entender cuando dibujas el reflejo en papel.
Salida de ejemplo
Como resultado, el programa debe imprimir una imagen de la habitación iluminada, con los puntos oscuros escritos como @
, puntos claros en blanco y los espejos no afectados. Para el ejemplo anterior, la salida sería:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Esto significa que, si dibujas los rayos de luz, nunca alcanzarán los espacios marcados con @
.
Más ejemplos
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
también?Respuestas:
Python, 292 caracteres
Lee en la habitación, la hace rectangular, luego sale de la vela en todas las direcciones. M contiene los caracteres espejo activos y su efecto (
/\
para las direcciones cardinales,|-
para los demás)Puede manejar salas de hasta 97 caracteres de ancho.
fuente
c - 504
Se basa en la función predeterminada de K&R que llama semántica. Implementación muy sencilla, excepto por el violín que hace rebotar los rayos.
Sin golf
Validación
fuente