Dada una cuadrícula de direcciones y una posición inicial y final, determine el número mínimo de sustituciones en la cuadrícula de dirección que debe realizarse para completar el camino entre los dos puntos. La cuadrícula es doblemente cilíndrica. Esto está más claro dado un ejemplo.
Ejemplo
Tomemos la siguiente cuadrícula como ejemplo:
>>>>v
>>>><
<<<<<
Comencemos por (1, 1)
y terminemos en (1, 3)
(donde están las coordenadas (x, y)
o (col, row)
, con la fila superior y la columna izquierda 1
). Entonces, una posible solución es reemplazar el (1, 1)
y (1, 2)
con v
, para que la grilla final se vea así:
v>>>v
v>>><
<<<<<
A partir de (1, 1)
, el camino nos llevaría a (1, 3)
. Sin embargo, existe una solución más corta, que es reemplazar (5, 2)
con v
, por lo que la grilla final es esta:
>>>>v
>>>>v
<<<<<
A partir de (1, 1)
, un camino bastante largo conduce a (1, 3)
.
Reemplazar cualquier cosa en la fila superior con ^
trabajos también (gracias @Spitemaster).
Entrada
La entrada consistirá en una cuadrícula rectangular de 4 valores posibles, así como dos coordenadas. Puede tomar la cuadrícula en cualquier formato razonable; por ejemplo, matriz de caracteres o enteros, lista de cadenas, etc. También puede solicitar las dimensiones de la cuadrícula. Puede tomar las coordenadas en cualquier formato razonable; por ejemplo, par entero, número complejo, etc. Puede elegir indexación 0 o 1.
Salida
La salida debe ser un número entero, el número mínimo de reemplazos de cuadrícula necesarios para cerrar la ruta desde el principio hasta el final.
Reglas y especificaciones
- Se aplican lagunas estándar
- la cuadrícula es doblemente cilíndrica, lo que significa que moverse hacia arriba desde la parte superior va hacia abajo, la izquierda desde la izquierda hacia la derecha, etc.
Casos de muestra
Los casos de muestra se proporcionan como una matriz de caracteres y coordenadas indexadas 1.
Caso 1
Entrada
>>>>v
>>>><
<<<<<
1 1
1 3
Salida
1
Explicación
Ver ejemplo.
Caso 2
Entrada
<<<<<
v>v>v
>>>>>
1 1
5 3
Salida
1
Explicación
Puede reemplazar (1, 1)
con v
o (2, 1)
con v
. En el primer caso, comenzando desde (1, 1)
, el camino va directo hacia abajo y luego a la derecha hacia el destino. En el segundo caso, el camino gira de la izquierda a la derecha, llega (2, 1)
, baja, derecha, abajo y luego a la derecha hasta llegar al destino.
Caso 3
Entrada
^^^^^^
><<>>>
vvvvvv
2 2
5 2
Salida
2
Explicación
El mejor cambio es hacer que la fila central se ajuste alrededor de la izquierda al punto; es decir, haga el primer y el último elemento en la fila central <
. Alternativamente, hacer 2 2
y 3 2
ambos >
.
Este es un desafío de código de golf , por lo que gana el código más corto
fuente
^
ov
.><
¿hace ping pong de un lado a otro (para que se llegue a ambas posiciones) o es como si hubiera una pared entre ellos?Respuestas:
JavaScript (ES6),
140135 bytesToma datos como
(a, width, height, x1, y1)(x0, y0)
dondea[]
está una matriz de enteros y todas las coordenadas están indexadas a 0.Pruébalo en línea!
¿Cómo?
fuente
Gelatina ,
7372 bytesPruébalo en línea!
Ejemplo usando el caso 3 que requiere dos cambios (también tiene un pie de página para traducirlos
><v^
a números).Un programa completo que espera los siguientes argumentos:
Izquierda: una lista de dos listas; primero la cuadrícula de dirección aplanada codificada como 1 = derecha, 2 = izquierda, 3 = abajo, 4 = arriba, seguido de una lista de la posición final y la posición inicial como índices cero [fila, columna]. Para el primer ejemplo
[1,1,1,1,3,1,1,1,1,4,2,2,2,2,2],[[2,0],[0,0]]
,.Derecha: una lista de la cantidad de filas seguidas de columnas. Para el primer ejemplo
[3,5]
Devuelve el número de cambios necesarios para obtener de principio a fin. Reduzca la velocidad una vez que esto sea más de un cambio. En TIO, el tercer caso de ejemplo toma aprox. 30 segundos para completar.
La explicación completa a continuación, pero la descripción general es:
Explicación completa:
fuente