introduction
Vous avez le malheur d'être coincé dans une voiture en fuite sur un parcours d'obstacles. Toutes les fonctionnalités de la voiture sont non réactives, à l'exception du système de direction, qui est endommagé. Il peut rouler droit ou tourner à droite. La voiture peut-elle être guidée vers la sécurité?
Mécanique
Votre voiture commence dans le coin supérieur gauche d'une carte 8x8 et tente de se mettre en sécurité dans le coin inférieur droit. La voiture a une orientation (initialement à droite), mesurée par incréments de 90 degrés. La voiture peut effectuer l'une des deux actions suivantes:
- Conduire une case en avant, ou
- Tourner de 90 degrés dans le sens des aiguilles d'une montre, puis avancer d'un carré
Notez que la voiture est incapable de tourner suffisamment brusquement pour effectuer un virage à 180 degrés sur une seule case.
Certaines des places sont des obstacles. Si la voiture pénètre dans un obstacle, elle se bloque. Tout ce qui se trouve en dehors du parcours 8x8 est supposé être un obstacle. Par conséquent, quitter le parcours équivaut à un accident.
Le carré en bas à droite est le coffre-fort, qui permet à la voiture d'échapper au parcours du combattant. La case de départ et la case de sécurité sont supposées ne pas être des obstacles.
Tâche
Vous devez écrire un programme ou une fonction prenant en entrée un tableau 8x8 (matrice, liste de listes, etc.) représentant le parcours du combattant. Le programme retourne ou imprime un booléen, ou quelque chose de similaire. S'il est possible pour la voiture de se rendre à la case de sécurité sans se planter (c'est-à-dire si la carte est résoluble), la sortie l'est True
, sinon False
.
Notation
Règles de golf de code standard - le gagnant est le code avec le moins d'octets.
Bonus:
Si, pour une carte résoluble, votre code génère une série valide d'entrées de conducteur qui guident la voiture vers le coffre-fort, déduisez 10 points de pourcentage de votre score. Un exemple de format de sortie pourrait être
SRSSR
(indiquant droite, droite, droite, droite, droite). Cette sortie remplacerait laTrue
sortie standard .Si, pour une carte insoluble, la sortie de votre code établit une distinction entre les situations dans lesquelles un accident est inévitable et les situations dans lesquelles il est possible de contourner le parcours du combattant pour toujours, déduisez 10 points de pourcentage de votre score. Un exemple de sortie pourrait être
Crash
si un accident est inévitable, ouStuck
si la voiture est bloquée dans le parcours du combattant pour toujours. Ces sorties remplaceraient laFalse
sortie standard pour une carte insoluble.
Exemple
Si le programme reçoit un tableau 8x8 tel que celui-ci:
[[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 0, 0, 1, 0]]
Cela serait interprété comme une carte comme celle-ci, avec des carrés noirs indiquant les obstacles:
Et une solution possible pourrait être:
Puisqu'une solution existe, le programme doit retourner / imprimer True
pour cette carte. La séquence de mouvements illustrée ici est SSSSRSRRRSRSSRRRSSRSSS
.
Crash
etStuck
. Ils sont ici à cause de combien de temps ils sont. Rangée 2 remplie, tout le reste vide ->Crash
. Rangée 7 remplie, tout le reste vide ->Stuck