introduction
Tout le monde sait que la possibilité de naviguer avec succès dans un champ d'astéroïdes est d'environ 3 720 à 1. Cependant, malgré votre avertissement, Han Solo est toujours disposé à tenter sa chance.
Craignant pour votre vie artificielle, vous décidez de coder, dans le dialecte spécifique du navire ( lisez: votre langue préférée de Code Golf ), un programme permettant d'éviter les astéroïdes qui décidera quel chemin emprunter dans un labyrinthe ASCII de champ d'astéroïdes.
Contribution
Le Millenium Falcon possède un programme de cartographie des astéroïdes qui fournit des données similaires à celles-ci:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Les rangées supérieures sont à gauche du Falcon, les rangées inférieures à droite du Falcon et les colonnes représentent ce qui se trouve devant le vaisseau.
- Chaque
#
est un obstacle. - Chaque espace est un espace vide dans lequel le navire peut voler.
- L'entrée est toujours haute de 7 caractères. C'est la limite de largeur de mappage d'astéroïde.
- La saisie comporte toujours 32 caractères (30 pour le champ et 2 pour les limites de début et de fin). C'est la limite de profondeur de cartographie d'astéroïde. Barres verticales
|
marquent le début et la fin du mappage. @
est le faucon. Il se trouve toujours dans la rangée du milieu (4ème rangée) et dans la première colonne de l'entrée.- L'espace laissé dans les barres verticales de la dernière colonne est l'endroit où le navire doit arriver. Il est toujours dans la rangée du milieu (4ème rangée) et dans la dernière colonne de l'entrée.
L'entrée peut être considérée comme une chaîne multiligne, un tableau de chaînes, à partir de paramètres STDIN ou d'une fonction, ou lue dans un fichier.
Manoeuvres possibles
TIE-Fighters vous poursuit, vous devez donc toujours aller de l'avant. Le navire peut donc voler à chaque étape de trois manières différentes:
-
Vers l'avant/
Avancer et tourner à gauche\
Avancer et tourner à droite
Par exemple, ce sont des chemins valides:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Comme vous pouvez le constater, il y a toujours exactement un mouvement par colonne. Le Falcon est un morceau de ferraille, donc il ne peut pas faire de virages violents. Ce qui signifie des mouvements tels que /\
ou \/
sont interdits . Il doit y avoir au moins un pur attaquant-
entre deux tours opposés. Comme indiqué ci-dessus, il est également possible de tourner dans un sens pour plusieurs étapes consécutives.
Le Falcon se bloque si un mouvement entraîne le navire dans un endroit où se trouve un obstacle. Par exemple, ces mouvements entraînent des accidents:
@-#
@
\
#
#
/
@
Notez que ce n'est pas un crash:
@-#
\
-
Sortie
Vous devez sortir le même champ astéroïde ASCII, avec un chemin valide à la fin. Le Falcon doit être imprimé au point final au lieu du point de départ.
Par exemple, une sortie valide pour l'exemple d'entrée donné ci-dessus serait:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Votre chemin doit seulement ne pas écraser le faucon. Il n'est pas nécessaire que ce soit le chemin le plus court possible.
Vous pouvez supposer qu'il y aura toujours au moins un chemin possible vers la fin.
Vous pouvez exporter vers STDOUT, dans un fichier ou un équivalent, tant que le champ de l'astéroïde est imprimé exactement comme ils le sont dans cet article (par exemple, l'affichage d'une liste de coordonnées pour le chemin d'accès n'est pas valide).
Cas de test
Un champ d'astéroïdes normal
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Sortie possible
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Champ d'astéroïdes hyper-régulier
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Sortie possible
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Noyau de l'étoile de la mort
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Sortie possible
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Tranchée étoile de la mort
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Sortie
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Grotte d'astéroïdes
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Sortie possible
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
Notation
R2D2 est occupé à nager dans les marécages, vous devrez donc programmer vous-même le contrôleur du Falcon, ce qui est fastidieux. Par conséquent, le code le plus court gagne .
-
, à chaque virage, un chemin qui se définit comme un coup «en avant». Mais les mouvements réels sont toujours deux diagonales à gauche suivies de deux diagonales à droite.