Los juegos de tácticas por turnos como Advance Wars, Wargroove y Fire Emblem están formados por una cuadrícula cuadrada de terreno variable con unidades de diferentes clases de movimiento que requieren diferentes costos para cada tipo de terreno. Investigaremos un subconjunto de ese problema.
Desafío
Su tarea es determinar si una ubicación es accesible desde otra dada una cuadrícula de costos del terreno y una velocidad de movimiento.
Las unidades solo pueden moverse ortogonalmente donde el costo de moverse a un cuadrado es el valor de la celda correspondiente en la cuadrícula (el movimiento es libre). Por ejemplo, pasar de una celda con un valor de 3 a una celda con un valor de 1 cuesta 1 movimiento, pero ir a la inversa requiere 3. Algunas casillas pueden ser inaccesibles.
Ejemplo
1 [1] 1 1 1
1 2 2 3 1
2 3 3 3 4
1 3 <1> 3 4
Moverse de [1]
a <1>
requiere un mínimo de 7 puntos de movimiento moviéndose hacia la derecha un cuadrado y luego hacia abajo tres. Por lo tanto, si se le da 6 o menos como la velocidad de movimiento, debe generar una respuesta falsa.
Ejemplos de casos de prueba
Estos utilizarán coordenadas de índice cero (fila, columna) de origen superior izquierdo en lugar de celdas entre corchetes para el inicio y el final para facilitar el análisis. Las celdas inalcanzables se representarán conX
Caso 1a
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (2, 3) to (0, 1)
Output: True
Caso 1b
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 4
From (2, 3) to (0, 1)
Output: False
Caso 1c
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (0, 1) to (2, 3)
Output: False
Caso 2a
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (3, 4) to (2, 1)
Output: True
Caso 2b
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 4
From (3, 4) to (2, 1)
Output: False
Caso 2c
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (1, 8) to (2, 7)
Output: True
Caso 3a
2 1 1 2
2 3 3 1
Speed: 3
From (0, 0) to (1, 1)
Output: False
Caso 3b
2 1 1 2
2 3 3 1
Speed: 3
From (1, 1) to (0, 0)
Output: True
Reglas, supuestos y notas
- Las lagunas estándar están prohibidas, las E / S pueden estar en cualquier formato conveniente
- Puede suponer que las coordenadas están todas en la cuadrícula
- La velocidad de movimiento nunca será superior a 100
- Las celdas inaccesibles pueden representarse con números muy grandes (por ejemplo, 420, 9001, 1 millón) o con 0 o nulo, lo que sea más conveniente para usted.
- Todas las entradas consistirán en enteros positivos (a menos que se use nulo o 0 para representar celdas inalcanzables)
fuente
Respuestas:
Consulta TSQL,
205191 bytesLa entrada es una variable de tabla @t
@ x = inicio xpos, @ y = inicio ypos @ i = fin xpos, @ j = fin ypos @ = velocidad
Pruébelo en línea versión sin golf
fuente
Python 2 , 220 bytes
Pruébalo en línea!
Toma una matriz
m
de enteros, con'X'
un valor mayor que 100; una velocidada
, quem
tiene anchow
y altoh
; y regresa donde podamos comenzar en la celda de fila / columna indexada a cero(r,c)
y llegar a la celda final(R,C)
.El algoritmo es un relleno de inundación modificado. Código levemente no golfista:
fuente
JavaScript (ES7),
116113 bytes(matrix)([endRow, endCol])(speed, startRow, startCol)
Pruébalo en línea!
Comentado
fuente
Jalea , 59 bytes
Pruébalo en línea!
No es terriblemente rápido; intenta todos los caminos hasta que las unidades de velocidad se agoten, incluso volviendo sobre sus pasos Sin embargo, esto evita la necesidad de verificar si se visitan espacios. La entrada se proporciona como
[nrows, ncols],[start_row, start_col],[end_row, end_col],speed,flattened matrix column-major
Explicación
Enlace auxiliar
Enlace principal
fuente
Jalea , 38 bytes
Un programa completo extremadamente ineficiente que acepta el terreno (con invisibles como 101), luego las coordenadas de inicio y fin, luego la velocidad.
Pruébalo en línea! (¡no tiene mucho sentido probar la mayoría de los casos de prueba!)
¿Cómo?
Crea una lista de todas las permutaciones de cada uno de los conjuntos de potencia de "todas las ubicaciones del terreno, excepto el inicio y el final", rodea cada uno de estos con el inicio y el final, filtra a aquellos que solo realizan movimientos ortogonales de distancia uno, suelta el inicio de cada uno, indexa nuevamente en el terreno, suma cada uno, toma el mínimo, resta uno y prueba que esto es menor que la velocidad.
fuente