Este desafío tiene lugar en una cuadrícula.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
Este es de 10 x 10, pero puede tener cualquier forma rectangular.
Hay cuatro direcciones en esta cuadrícula. Arriba, abajo, izquierda y derecha.
La tarea es dibujar un camino que comience con una dirección de mayúscula inicial. En este ejemplo, irá directamente hacia arriba desde la U.
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
El camino irá hacia arriba y estará compuesto por caracteres de punto y coma (.), Hasta que llegue a una pared, cuando terminará con un asterisco (*).
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
Además del inicio de ruta, también hay cambiadores de dirección, representados por una dirección inicial en minúscula.
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
Además, una mayúscula X es un obstáculo que terminará el camino.
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
Reglas
- La entrada es una cadena que consta de un cuadro (que consta de |, - y + caracteres) que contiene caracteres que indican el inicio de la ruta, los cambiadores de dirección y los obstáculos.
- Su código debe agregar caracteres de punto final para seguir la ruta descrita por los cambios de inicio y dirección, y un asterisco cuando / si la ruta se encuentra con una pared u obstáculo.
- Puede haber múltiples rutas de inicio.
- El código seguirá terminando sin error si la ruta describe un bucle.
- Si una ruta se encuentra con un inicio de ruta, actuará como un cambiador de dirección.
- Es código de golf, código de bajo byte y sin lagunas estándar, por favor.
- Siempre prefiero enlaces a un intérprete en línea.
Casos de prueba
1: simple
+----------+
| |
| |
| |
| |
| |
| |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . |
| . |
| . |
| . |
| . |
| U |
+----------+
2: giro a la derecha
+----------+
| |
| |
| |
| r |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r.....*|
| . |
| . |
| . |
| . |
| U |
+----------+
3: encrucijada
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| . r..d |
| . . . |
| u....l |
| . |
| . |
| U |
+----------+
4: 4 caminos cruzados
+----------+
| D |
| |
| |
|R |
| |
| L|
| |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| . . |
|R........*|
| . . |
|*........L|
| . . |
| . . |
| U * |
+----------+
5: primer bucle
+----------+
| |
| |
| |
| r d |
| |
| u l |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| r..d |
| . . |
| u..l |
| . |
| . |
| U |
+----------+
6: Arrancador como cambiador
+----------+
| |
| |
| |
| L |
| |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
|*..L |
| . |
| . |
| . |
| . |
| U |
+----------+
7: bucle recto
+----------+
| |
| |
| |
| |
| r l |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r..l |
| . |
| . |
| . |
| U |
+----------+
8: nudo apretado
+----------+
| |
| |
| |
| d l |
| r u |
| r u |
| |
| |
| U |
+----------+
+----------+
| * |
| . |
| . |
| d..l |
| .r.u |
| r.u |
| . |
| . |
| U |
+----------+
9: un obstáculo
+----------+
| |
| |
| |
| |
| r X |
| |
| |
| |
| U |
+----------+
+----------+
| |
| |
| |
| |
| r...*X |
| . |
| . |
| . |
| U |
+----------+
10: forma de S
+----------+
|r d |
| |
| XXXXXXXX|
| d l |
|ul |
|XXXXXXX |
| |
|R u |
| |
+----------+
+----------+
|r.....d |
|. * |
|. XXXXXXXX|
|.d......l |
|ul . |
|XXXXXXX . |
| . |
|R.......u |
| |
+----------+
11: nudo de 4 vías
+----------+
| D |
| |
| r |
|R d |
| |
| u L|
| l |
| |
| U |
+----------+
+----------+
| * D |
| . . |
| r.....*|
|R....d. |
| .... |
| .u....L|
|*.....l |
| . . |
| U * |
+----------+
12: Cruces ocupados
+----------+
|rrrrr rrrd|
| rlrl |
|ul rrd |
|ruX X |
|udl ll |
|ull |
|rlr |
|rdr d |
|Uruull |
+----------+
+----------+
|rrrrr.rrrd|
|.rlrl .|
|ul rrd .|
|ruX.X. .|
|udl.ll .|
|ull. .|
|rlr. .|
|rdr..d .|
|Uruull *|
+----------+
13: Comienza en Edge
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
+----------+
| U |
| |
| |
| |
| |
| |
| |
| |
| |
+----------+
14: Cruzando caminos muertos
+----------+
| |
| |
| |
| R |
| |
| |
| |
| |
| U|
+----------+
+----------+
| *|
| .|
| .|
| R..*|
| .|
| .|
| .|
| .|
| U|
+----------+
Respuestas:
JavaScript (ES6),
191 183181 bytesGracias a @tsh por ayudar a corregir un error
Toma la entrada como una matriz de caracteres. Salidas modificando la entrada.
Pruébalo en línea!
Comentado
fuente
[...""+a].map
podría crear una matriz con al menos 2x de longitud de a. No estoy seguro si ayuda.(a+0)[n]
guarda un byte, aunquen
ahora debe inicializarse.Python 2 ,
283279293288279 bytesPruébalo en línea!
Toma una lista de listas.
Salidas modificando la matriz de entrada.
fuente
Perl 5,
203188166 bytesTIO
Cómo funciona
$s=$_
para guardar entradas$s
para restaurar los cambiadores de minúsculas$_|=$s
porque bit a bit o con espaciono cambiará
.
y*
las letras minúsculasurld
se restaurarán con bit a bit u operación./\n/;$n='.'x"@-"
para obtener "ancho" y$n
para coincidir con cualquier carácter "ancho" veces$l='\K[ a-z](?=';$t='([-|X])?'
para reducir la longitud de la expresión regular;$l
para que coincida con una letra minúsculaurld
o un espacio en una ruta,$t
para que coincida con un terminador.Después del reemplazo:
(?| R[.*]*\K[ a-z](?=([-|X])?) | ([-|X])?\K[ a-z](?=[.*]*L) | D$n(?:[.*]$n)*\K[ a-z](?=$n([-|X])?) | ([-|X])?$n\K[ a-z](?=$n([.*]$n)*U) )
/e
a eval, de/s
modo que.
(dentro$n
) coincida también con un carácter de nueva línea$&eq$"?$1?'*':'.':uc$&
si coincide es un espacio, si termiator coincide de*
otra.
manera mayúscula.fuente
$s
en el pie de página.$s
se usa para guardar la entrada yLimpio , 409 bytes
Pruébalo en línea!
fuente
Python 2 , 250 bytes
Pruébalo en línea!
Toma una lista de listas de cadenas 1-char, según lo permitido explícitamente por el OP.
Cambia la lista en su lugar.
Para una E / S más fácil, use esto .
fuente