Certains voyous à base de texte ne vous laissent pas entrer dans les murs et vous permettent de revenir en arrière si vous essayez. Pourquoi faire cela quand vous pouvez faire bouger le joueur dans la direction valide la plus proche?
Le défi
Écrivez un programme de fonction qui, étant donné une direction et une grille de caractères 3 x 3, sort la même grille après que le joueur ait fait un pas.
Par exemple,
9
#..
.@#
#.#
devient
#.@
..#
#.#
Contribution
La direction est donnée par un seul chiffre de 1 à 9, chacun correspondant à 8 directions cardinales et immobile. Ceci est dérivé des emplacements relatifs des nombres sur un clavier:
NW N NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE
Cependant, vous pouvez également utiliser les nombres 123, 456, 789 au lieu de 789, 456, 123. En d'autres termes, vous pouvez permuter les 2 lignes ou numéros supérieurs et inférieurs si vous le souhaitez. Ce sont les 2 seules combinaisons d'indices acceptables.La grille 3 x 3 sera composée de 3 caractères ASCII imprimables distincts représentant le sol, les murs et le lecteur. (Dans les cas de test,
.
est utilisé pour le sol,#
s sont des murs et@
est le joueur)- Vous pouvez choisir les caractères que votre programme utilise, mais vous devez les indiquer dans votre réponse et ils doivent être cohérents sur plusieurs essais.
- Le personnage représentant le personnage sera toujours au milieu de la grille 3 par 3, et la direction sera toujours entre 1 et 9 (incl.)
- Vous pouvez prendre des informations dans n'importe quel ordre
- La grille 3 par 3 peut être entrée comme un tableau de caractères, un tableau de chaînes, une chaîne de 9 longueurs ou une autre alternative raisonnable.
Production
- Retour d'une fonction ou sortie vers StdOut ou l'alternative la plus proche
- Les espaces de fin et les nouvelles lignes sont autorisés
- Vous devez utiliser les mêmes représentations de caractères que l'entrée
- Les mêmes formats autorisés pour les entrées sont autorisés pour les sorties
Comment se déplace le joueur
Si la direction spécifiée est bloquée par un mur (par exemple si l'exemple ci-dessus avait la direction 6), regardez les 2 directions les plus proches:
- Si une (et une seule) direction est libre, déplacez le joueur dans cette direction.
- Si aucune direction n'est libre, regardez les 2 directions les plus proches (sauf la direction 5). Si vous vous êtes enroulé tout autour et n'avez trouvé aucune direction ouverte (joueur entouré de murs), ne déplacez pas le joueur
- Si les deux directions sont ouvertes, choisissez-en une pour vous déplacer au hasard (mais pas nécessairement uniformément).
Si la direction donnée est un 5, ne déplacez pas le joueur
Cas de test
( #
= mur, .
= sol, @
= joueur)
Contribution: 9 # .. . @ # #. # Production: #. @ .. # #. # Contribution: 3 # .. . @ # #. # Production: # .. .. # # @ # Contribution: sept ##. # @ # .. # Production: ## @ ##. #.# ou #.# .. # @. # Contribution: 5 ... . @. ... Production: ... . @. ... Contribution: 2 ### # @ # ### Production: ### # @ # ###
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
123;456;789
au lieu de789;456;123
?
yuhjklbn
? DÉCHIRURE.