Les jeux tactiques au tour par tour comme Advance Wars, Wargroove et Fire Emblem sont constitués d'une grille carrée de terrain variable avec des unités de classes de mouvement différentes nécessitant des coûts différents pour chaque type de terrain. Nous allons enquêter sur un sous-ensemble de ce problème.
Défi
Votre tâche consiste à déterminer si un emplacement est accessible à partir d'un autre étant donné une grille de coûts de terrain et une vitesse de déplacement.
Les unités ne peuvent se déplacer orthogonalement que lorsque le coût de déplacement sur un carré est la valeur de la cellule correspondante sur la grille (le déplacement est gratuit). Par exemple, passer d'une cellule de valeur 3 à une cellule de valeur 1 coûte 1 mouvement, mais aller dans l'autre sens nécessite 3. Certains carrés peuvent être inaccessibles.
Exemple
1 [1] 1 1 1
1 2 2 3 1
2 3 3 3 4
1 3 <1> 3 4
Passer de [1]
à <1>
nécessite un minimum de 7 points de mouvement en se déplaçant vers la droite d'un carré puis vers le bas de trois. Ainsi, si donné 6 ou moins comme vitesse de déplacement, vous devriez produire une réponse fausse.
Exemples de cas de test
Ceux-ci utiliseront des coordonnées indexées en haut à gauche (ligne, colonne) plutôt que des cellules entre crochets pour le début et la fin afin de faciliter l'analyse. Les cellules inaccessibles seront représentées parX
Cas 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
Cas 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
Cas 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
Cas 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
Cas 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
Cas 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
Cas 3a
2 1 1 2
2 3 3 1
Speed: 3
From (0, 0) to (1, 1)
Output: False
Cas 3b
2 1 1 2
2 3 3 1
Speed: 3
From (1, 1) to (0, 0)
Output: True
Règles, hypothèses et notes
- Les failles standard sont interdites, les E / S peuvent être dans n'importe quel format pratique
- Vous pouvez supposer que les coordonnées sont toutes sur la grille
- La vitesse de déplacement ne dépassera jamais 100
- Les cellules inaccessibles peuvent être représentées avec de très grands nombres (par exemple 420, 9001, 1 million) ou avec 0 ou nul, selon ce qui vous convient le mieux.
- Toutes les entrées seront constituées d'entiers positifs (sauf si vous utilisez null ou 0 pour représenter des cellules inaccessibles)
la source
Réponses:
Requête TSQL,
205191 octetsL'entrée est une variable de table @t
@ x = début xpos, @ y = début ypos @ i = fin xpos, @ j = fin ypos @ = vitesse
Essayez-le en ligne version non golfée
la source
Python 2 , 220 octets
Essayez-le en ligne!
Prend un tableau
m
d'entiers, avec'X'
comme valeur supérieure à 100 ;, une vitessea
,m
ayant une largeurw
et une hauteurh
; et retourne où nous pouvons commencer à la cellule de ligne / colonne indexée zéro(r,c)
et arriver à la cellule finale(R,C)
.L'algorithme est un remplissage inondé modifié. Code légèrement non golfé:
la source
JavaScript (ES7),
116113octets(matrix)([endRow, endCol])(speed, startRow, startCol)
Essayez-le en ligne!
Commenté
la source
Gelée , 59 octets
Essayez-le en ligne!
Pas terriblement rapide; tente tous les chemins jusqu'à ce que les unités de vitesse soient épuisées, retraçant même ses pas. Cependant, cela évite d'avoir à vérifier si les espaces sont visités. L'entrée est fournie comme
[nrows, ncols],[start_row, start_col],[end_row, end_col],speed,flattened matrix column-major
Explication
Lien d'aide
Lien principal
la source
Gelée , 38 octets
Un programme complet extrêmement inefficace acceptant le terrain (avec des invisibles comme 101) puis les coordonnées de début et de fin puis la vitesse.
Essayez-le en ligne! (pas grand chose à essayer la plupart des cas de test!)
Comment?
Crée une liste de toutes les permutations de chacun des ensembles de puissance de "tous les emplacements de terrain sauf le début et la fin", entoure chacun d'eux avec le début et la fin, filtre ceux qui ne font que des mouvements orthogonaux de distance un, supprime le début de chacun, indexe le terrain, additionne chacun, prend le minimum, en soustrait un et vérifie que c'est inférieur à la vitesse.
la source