Contexte
Vous vous réveillez pour vous retrouver perdu dans un labyrinthe à une dimension! Un génie mystique (ou quelque chose) apparaît et explique que la sortie se trouve devant vous, mais qu'entre vous et la sortie est une série de défis. En avançant, vous réalisez que tous les prétendus défis ne sont que des portes verrouillées. Vous voyez d’abord une porte avec un trou de clé en forme de té; sans cette clé, revenez sur vos pas et recherchez une clé de T
forme.
Frustré, vous trouvez sur le sol une soupe de clés alphabet, dont aucune ne correspond à la porte que vous avez rencontrée. Par un coup de génie (ou d'idiotie), vous décidez que la t
clé en forme de minuscule pourrait bien s'insérer dans la fente si vous l'enfoncez assez fort. Lorsque vous approchez la porte avec la t
clé minuscule dans la main, le T
trou devient vert et la porte se dissout devant vous.
Une baisse, beaucoup plus à faire ...
Défi
Le but de ce défi est de marquer le nombre de pas nécessaires pour sortir du labyrinthe.
La saisie de ce défi est le labyrinthe: une chaîne ne contenant que des caractères [A-Za-z^$ ]
. Glossaire:
^
- L'espace de départ. L'entrée contiendra exactement un^
.$
- La sortie (liberté!). L'entrée contiendra exactement un$
.[A-Z]
- Les lettres majuscules signifient des portes. Vous ne pouvez passer par cette porte que si vous avez déjà recueilli la clé requise.[a-z]
- Les lettres minuscules désignent les touches. Vous collectez ces clés en accédant à l'espace contenant la clé.
Il y aura au plus une de chaque lettre majuscule dans l'entrée. Cela signifie que le nombre total de portes sera compris entre 0 et 26 inclus.
Chaque porte verrouillée [A-Z]
aura exactement une clé minuscule correspondante [a-z]
. Il peut y avoir un nombre quelconque d'espaces ( ) dans l'entrée.
Toutes les portes seront à droite du début et à gauche de la sortie. Ainsi, il n'y aura pas de portes superflues. Toutes les entrées seront solubles.
Le résultat de ce défi sera un nombre, le nombre de pas nécessaires pour sortir du labyrinthe.
Algorithme
Votre approche méthodique pour sortir de ce lieu misérable est la suivante:
- Commencez au début (
^
) et avancez (à droite) en collectant les clés que vous rencontrez. - Lorsque vous rencontrez une porte, si vous avez la bonne clé, vous avancez vers la porte. Si vous ne possédez pas la bonne clé, vous récupérez les clés que vous rencontrez jusqu'à ce que vous trouviez la clé de la dernière porte que vous ne pouviez pas ouvrir.
- Une fois que vous avez récupéré la clé de la porte gênante actuelle, vous retournez à droite et continuez.
- Répétez cette procédure jusqu'à ce que vous passiez à la sortie (
$
).
Les golfeurs expérimentés comprendront que votre code n'a pas à implémenter cet algorithme spécifique tant qu'il génère le même résultat que si vous l'aviez exécuté.
Compte
Chaque fois que vous passez d'une case à une autre, cela compte pour une étape. Le virage à 180º ne comporte aucune étape supplémentaire. Vous ne pouvez pas avancer sur une porte sans la clé requise. Vous devez marcher sur une clé pour la récupérer et vous devez vous diriger vers la sortie pour gagner. Après votre premier déplacement, l’espace de départ ( ^
) se comporte comme tout autre espace normal.
Exemples
Dans ces exemples, j'ai laissé les espaces comme des soulignés pour la lisibilité humaine.
L'entrée est _a_^_A__$__
. La sortie est 11
. Vous 1
faites un pas en avant, remarquez que vous n’avez pas de clé pour la A
porte, puis sur votre visage. Vous marchez en arrière jusqu'à occuper l'espace contenant le a
( 3
pas en arrière, maintenant 4
total). Vous avancez ensuite jusqu'à occuper l'espace contenant la sortie ( 7
pas en avant, 11
total).
L'entrée est b__j^__a_AJB_$
. La sortie est 41
Vous faites deux allers-retours distincts à l’arrière du labyrinthe, l’un pour récupérer la j
clé et le suivant pour obtenir la b
clé.
L'entrée est __m__t_^__x_T_MX_$____
. La sortie est 44
. Vous ne ferez aucun voyage supplémentaire pour obtenir la x
clé, car vous la récupérerez du début à la fin T
.
L'entrée est g_t_^G_T$
. La sortie est 12
. Vous ne pouvez pas vous déplacer dans l’ G
espace sans clé, et immédiatement sur votre visage. Vous avez la chance de récupérer la t
clé sur le chemin de la g
clé et d'ouvrir ainsi les deux portes sur votre chemin vers la liberté.
L'entrée est _^_____$
. La sortie est 6
. C'était facile.
Directives d'E / S et critère gagnant
Les règles d'E / S standard s'appliquent. Ceci est un défi de code-golf .
A
dans bA^aB$
ne serait pas superflu non plus . ;)