Sur les conseils de Mme Pac-Man qui craint qu'il ne fasse de l'embonpoint, Pac-Man a décidé de suivre son apport quotidien en Pac-Dot. Aidez-le à compter le nombre de Pac-Dots sur un chemin donné dans le labyrinthe!
Le labyrinthe
Pour vous aider à créer votre propre encodage du labyrinthe, vous pouvez obtenir des données brutes ici .
Le voyage de Pac-Man
Dans le cadre de ce défi, les règles suivantes s'appliquent:
- Tout d'abord, la bonne nouvelle: les fantômes ne sont pas là.
- Pac-Man commence toujours sa course à la position indiquée sur l'image ci-dessus, en direction de l'Est. Il n'y a pas de Pac-Dot à la position de départ.
- Tant qu'il suit un chemin droit, il continue de progresser vers les cases suivantes.
- Lorsqu'il rencontre un virage à 90 ° sans aucun autre chemin disponible (carrés orange sur la carte), il prend automatiquement et systématiquement le virage.
- Lorsqu'il rencontre une jonction où plusieurs chemins sont disponibles (carrés verts sur la carte), il peut soit continuer dans la même direction - le cas échéant - soit choisir une autre direction (y compris faire demi-tour).
- Lorsque Pac-Man passe par l'une des sorties du milieu gauche ou du milieu droit du labyrinthe, il réapparaît immédiatement du côté opposé.
- Pac-Man mange tous les Pac-Dots sur le chemin qu'il suit. Une fois qu'un Pac-Dot a été mangé, il est retiré du labyrinthe.
Le défi
Contribution
Vous recevrez une chaîne décrivant le comportement de Pac-Man sur les jonctions qu'il va atteindre. Cette chaîne sera composée des caractères suivants:
L
: tourner à 90 ° vers la gaucheR
: tourner à 90 ° vers la droiteF
: aller de l'avant (pas de changement de direction)B
: reculer (faire demi-tour)
Lorsque tous les personnages ont été traités, Pac-Man s'arrête à la prochaine jonction qu'il rencontre.
Sortie
Vous devez imprimer ou imprimer le nombre de Pac-Dots consommés le long du chemin d'entrée.
Règles
- Vous pouvez écrire un programme complet ou une fonction.
- Vous pouvez prendre les entrées en majuscules ou en minuscules, sous la forme d'une chaîne ou d'un tableau de caractères. Vous pouvez également utiliser d'autres caractères (mais un seul caractère par direction) ou des entiers dans
[0 .. 9]
. Si vous le faites, veuillez le préciser clairement dans votre réponse. - Vous pouvez supposer que l'entrée est toujours valide. (Le jsFiddle ci-dessous détectera les erreurs, mais vous n'êtes pas censé le faire.)
- Il s'agit de code-golf, donc le code le plus court en octets l'emporte.
- Les failles standard sont interdites.
Allusion
Il peut ne pas être nécessaire ni optimal pour stocker la forme exacte du labyrinthe.
Cas de test et démo
Les cas de test suivants - ou toute autre entrée - peuvent être testés dans ce jsFiddle .
1. Input : ""
Output : 1
Comment: Pac-Man just advances to the first junction, eats the Pac-Dot on it and stops.
2. Input : "L"
Output : 7
3. Input : "FFR"
Output : 13
4. Input : "LFLR"
Output : 17
Comment: Pac-Man will exit on the middle right side and re-appear on the left side.
5. Input : "BBBB"
Output : 2
6. Input : "BRRFFFL"
Output : 15
7. Input : "LFFRLFFFFRF"
Output : 50
8. Input : "BRFRLRFRLFR"
Output : 54
Comment: Pac-Man will exit on the middle left side and re-appear on the right side.
9. Input : "FFLRLFFLLLLFFBFLFLRRRLRRFRFLRLFFFLFLLLLFRRFBRLLLFBLFFLBFRLLR"
Output : 244
Comment: All cleared!
la source
Réponses:
Pyth,
356345 + 1 = 346 octetsLe code contient des non imprimables, voici donc le
xxd
vidage hexadécimal réversible .Nécessite le
-M
drapeau pour désactiver la mémorisation. Malheureusement, cela ne peut être fait dans aucun exécuteur en ligne que je connaisse.Voici une version ASCII imprimable et
lisible:Explication
Il s'agit d'un travail en cours, donc je ne publierai pas encore d'explication complète.
Fondamentalement, le programme représente la carte sous la forme d'un graphique (quelque peu étrange) utilisant cinq tables de recherche: 2 pour la connectivité, 1 pour les directions de jonction et 2 pour le nombre de points. Cela a été construit par un script Python de 200 lignes sur lequel j'ai passé beaucoup trop d'heures. Ensuite, le programme parcourt simplement l'entrée et compte les points, mettant à jour les tables de points à zéro au fur et à mesure que les points sont collectés.
FAIRE:
la source
k, 264 octets
Vidage hexadécimal:
Les données binaires à la fin codent deux tableaux:
a
se compose de paires d'octets, chacune représentant (64 * direction) + junctionIdb
est le nombre de points Pacman entre chaque paire de jonctionsa
Le programme lit son propre fichier source (
p.k
) et décode les données.L'entrée provient de stdin et utilise 0x00,0x01,0x02,0x03 (alias NUL, SOH, STX, ETX - les quatre premiers codes ASCII) au lieu de FLBR.
J'utilise ma propre implémentation de k qui est limitée, gonflée, planteuse et lente par rapport à la réalité . Je teste avec le programme suivant:
la source