Le jeu
La plupart d'entre nous connaissent Frogger , le jeu d'arcade des années 80 où l'objectif est de sauter une grenouille en toute sécurité sur une route très fréquentée et un étang rempli de dangers pour arriver en toute sécurité à la maison.
Un défi a été lancé il y a quelques mois pour développer un clone Frogger. Mais pourquoi cloner Frogger quand vous pouvez jouer à Frogger? :)
Considérez la grille de jeu simplifiée suivante:
XXXXXXXXXXXXXXXXXXXXXXX North Safe Zone
-----------------------
| | <<<< Express Lane West (Lane 1)
| | > Gridlock East (Lane 2)
| | << Freeflowing Traffic West (Lane 3)
| | < Gridlock West (Lane 4)
| | >>>> Express Lane East (Lane 5)
-----------------------
XXXXXXXXXXX@XXXXXXXXXXX South Safe Zone
\__________ __________/
'
23 cells horizontally
Nous avons cinq voies de circulation, chacune de 23 cellules de large, et deux zones de sécurité (où la grenouille peut se déplacer en toute sécurité à gauche et à droite), également de 23 cellules de large. Vous pouvez ignorer les bordures droite et gauche car elles le sont pour la clarté des images.
Notre grenouille commence dans la zone de sécurité sud, sur la cellule centrale (12e), comme indiqué par un @
dans la figure ci-dessus.
Le temps dans le jeu est divisé en étapes discrètes appelées trames. Froggy est une grenouille rapide et peut sauter une cellule dans n'importe quelle direction (haut, bas, droite, gauche) par image. Il peut également choisir de rester immobile pour n'importe quelle image. La circulation dans les cinq voies se déplace à vitesse constante comme suit:
- le trafic dans la voie express ouest (voie 1) se déplace de 2 cellules à gauche à chaque image
- le trafic dans la voie d'embouteillage est (voie 2) se déplace de 1 cellule à droite toutes les deux images
- le trafic dans la voie ouest à circulation libre (voie 3) se déplace de 1 cellule à gauche à chaque image
- le trafic dans la voie ouest bloquée (voie 4) se déplace de 1 cellule à gauche toutes les deux images
- le trafic dans la voie express est (voie 5) déplace 2 cellules à droite à chaque image
Le trafic lui-même est défini de manière unique pendant env. 3000 pas de temps dans ce fichier texte . Le «trafic» se compose de véhicules et d'espaces entre les véhicules. Tout personnage qui n'est pas un espace fait partie d'un véhicule. Le fichier texte contient cinq lignes, correspondant aux cinq voies de circulation (avec le même ordre).
Pour les voies en direction ouest, au début de l'image 0 (le début du jeu), nous considérons que le premier véhicule dans la voie est juste au-delà du bord droit de la grille de jeu.
Pour les voies en direction est, la chaîne de circulation doit être considérée "en arrière" dans le sens où les véhicules apparaissent à partir de la fin de la chaîne. Au début de l'image 0, nous considérons que le premier véhicule dans ces couloirs est juste au-delà du bord gauche du terrain de jeu.
Considérez comme exemple:
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
Ensuite, la grille de jeu apparaîtra comme suit:
Start of Frame 0 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 1 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 2 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 3 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Une fois que tout le trafic dans une voie est "épuisé" (c'est-à-dire que la chaîne est épuisée), nous considérons que tous les caractères de la chaîne sont des espaces.
Notre grenouille est écrasée si l'un des événements suivants se produit:
- la grenouille occupe une cellule occupée par un véhicule, sur n'importe quel châssis
- la grenouille reste immobile dans une voie express et un véhicule d'une largeur de cellule passe sur lui dans ce cadre
- la grenouille saute vers l'est "à travers" un véhicule se dirigeant vers l'ouest, ou saute vers l'ouest à travers un véhicule se dirigeant vers l'est
- la grenouille saute en dehors de la grille de jeu 7 (ligne) par 23 (cellule), sur n'importe quelle image
Notez que ce sont les seules conditions dans lesquelles une grenouille est écrasée. En particulier, une grenouille sautant le long du trafic "avec" est autorisée, tout comme une grenouille sautant dans ou hors d'une cellule dans une voie express qui est dépassée par un véhicule de largeur 1 dans le même cadre.
Objectif et notation
L'objectif du défi de programmation est de faire passer la grenouille sur la route autant de fois que possible avant que le dernier véhicule ne quitte la grille de jeu . C'est-à-dire que le programme se termine immédiatement après la fin de la trame X , où la trame X est la première trame qui amène la grille dans un état où plus aucun véhicule n'est présent.
La sortie de votre programme doit être une chaîne (ou un fichier texte) contenant la séquence de mouvements pour la grenouille en utilisant l'encodage suivant:
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
Par exemple, la chaîne <<^.^
indique que la grenouille se déplace vers la gauche deux fois, puis vers le haut, puis s'arrête pendant une image, puis se déplace à nouveau.
Un point est marqué chaque fois que la grenouille passe de la zone de sécurité sud à la zone de sécurité nord, et un point est marqué chaque fois que la grenouille passe de la zone de sécurité nord à la zone de sécurité sud.
Quelques règles importantes:
- La grenouille ne doit pas être écrasée.
- Veuillez poster votre solution (séquence de mouvements) avec votre code de programme, soit en ligne soit sous forme de fichier texte (par exemple en utilisant pastebin.com).
- Notre grenouille est prémonitoire et précognitif, c'est pourquoi votre programme peut utiliser toutes les données de trafic dans n'importe quel cadre tout en recherchant des solutions. Cela inclut les données pour le trafic qui n'a pas encore atteint la grille de lecture.
- La grille ne s'enroule pas. Sortir de la grille provoquera l'écrasement de la grenouille et n'est donc pas autorisé.
- A aucun moment, le trafic n'est "réinitialisé" ou la grenouille "téléportée". La simulation est continue.
- La grenouille peut retourner dans la zone de sécurité sud après sa sortie, mais cela ne compte pas comme un point. De même pour la zone de sécurité nord.
- Le gagnant du concours est le programme qui génère la séquence de déplacement donnant le plus grand nombre de traversées.
- Pour toute question ou préoccupation supplémentaire, n'hésitez pas à demander dans la section commentaires.
Pour une incitation supplémentaire, j'ajouterai une prime de +100 rep au programme gagnant lorsque je serai en mesure de le faire.
Bonus
+ 2,5% au score de base * (jusqu'à + 10%) pour chaque coin de la grille de jeu que la grenouille touche. Les quatre coins de la grille sont les cellules les plus à gauche et à droite des deux zones de sécurité.
+ 25% au score de base * si votre séquence de mouvements maintient la grenouille confinée à +/- 4 cases à gauche ou à droite de sa case de départ pour toute la simulation (il peut bien sûr se déplacer librement verticalement).
Aucun bonus de score, mais les accessoires spéciaux de l'OP iront à toute personne qui publie un validateur de solution rapide et sale, de sorte que je n'ai pas à en programmer un. ;) Un validateur accepterait simplement une séquence de mouvements, assurerait sa légalité (selon les règles et le fichier de trafic), et rendrait compte de son score (ie le nombre total de passages).
* Le score total est égal au score de base plus le bonus, arrondi à l'entier le plus proche.
Réponses:
C ++: 176
Production:
Il y a moins de 8 millions de combinaisons d'
étatsde position X temps X ensemble de coins visités, de sorte qu'ils peuvent être recherchés de manière exhaustive en moins d'une seconde. Si le code ne contient aucun bogue, il devrait être impossible de le battre. La stratégie optimale était d'utiliser toute la planche, car cela permet à Froggy de traverser la route 160 fois, contre environ 120 lorsqu'elle est confinée au centre. Visiter les virages n'a coûté aucun passage car la circulation était très dense.la source