À l'avenir, lorsque le voyage dans le temps (abrégé en TT) sera courant, le lancer de pièces deviendra un sport mental sérieux. Pour préparer l'avenir, nous créons un concours de programmes où les voyages dans le temps se feront vraiment du point de vue des participants.
Le concours est un tournoi à la ronde King of the Hill consistant à lancer des matchs entre les classes Java.
Règles du match de lancer de pièces
- Il y a deux joueurs et 100 tours.
- À chaque tour, une pièce est lancée et en fonction du résultat, l'un des joueurs marque 1 point. Chaque joueur a 50% de chances de marquer un point.
- Après le lancer, les deux joueurs ont la possibilité de contrôler le temps en tirant sur les leviers.
- Si vous tirez sur un levier bleu (butée de retour), aucun TT n'est possible pour le tour auquel le levier a été utilisé ou pour tout tour précédent. La tentative de TT d'aller à ces tours n'aura aucun effet.
- Si vous tirez sur un levier rouge (inverseur), vous essayez de ramener le temps à un ancien tour. En cas de réussite, la mémoire de l' adversaire sera rétablie dans sa mémoire avant le tour choisi et les résultats du tirage au sort à partir du tour choisi seront également supprimés . Le seul signe possible pour votre adversaire au sujet du TT sera le nombre de ses leviers inutilisés qui ne seront pas inversés.
- Chaque joueur dispose de 5 leviers bleus et 20 rouges inutilisés au début du match. Ces leviers ne sont pas affectés par les TT.
- Si aucun TT ne se produit à la fin d'un 100e tour, la partie se termine et le joueur avec le score le plus élevé gagne.
Détails
- Les rondes ont une indexation basée sur 1 (de 1 à 100).
- Avant le tour,
x
vous disposez du nombre de leviers bleus et rouges disponibles, le résultat du lancer de pièces jusqu'au tourx
(inclus) et la mémoire de votre (dernier)x-1
tour. - Tirer un levier bleu en round
x
arrête tous les TT qui ont une destination au roundx
ou avant (cela bloque un TT si cela se produit également sur ce même round). - Revenir au tour
x
signifie que le prochain tour sera rondx
. - Si les deux joueurs choisissent de revenir à la fin d'un tour, le temps revient à la destination précédente qui n'est pas bloquée. Le ou les joueurs qui ont tenté de revenir à cette heure garderont leur mémoire.
Détails techniques
- Vous devez écrire une classe Java implémentant l'interface Bot fournie.
- Ajoutez votre bot au projet.
- Ajoutez une instance de votre Bot au
Bot
fichierController.java
. - Votre classe ne doit pas conserver d'informations entre les appels . (Dans la plupart des cas, le fait de n'avoir que des
final
variables en dehors des fonctions satisfait à cette exigence.) - Vous pouvez donner des informations au contrôleur dans le
memory
champ de votreAction
objet retourné . Cela vous sera rendu au tour suivant si aucun TT ne s'est produit. Si un TT se produit, vous recevrez votre mémoire antérieure correspondante. - Vous pouvez utiliser la
totalScore()
méthode de laGame
classe pour obtenir le score d'une chaîne d'historique.
Protocole
A chaque tour, votre
takeTurn(...)
méthode est appelée avec 5 arguments:- le nombre de leviers bleus inutilisés
- le nombre de leviers rouges inutilisés
- l'historique de lancer de pièces, une chaîne composée de 1 et de 0 marquant vos victoires et vos pertes lors des tours précédents. Le premier caractère correspond au premier lancer de pièces. (Au premier tour, la longueur de la chaîne sera
1
.) - une chaîne, votre mémoire stockée du tour précédent
- l'indice basé sur 1 de ce tour
A chaque tour, votre méthode retourne un
Action
objet contenantun entier dans le
move
champ décrivant votre action:0
pour aucune action-1
pour tirer un levier bleu et bloquer les TT qui traversent ce tour- un entier positif
x
, pas plus grand que le tour en cours, pour tirer un levier rouge et essayer de revenir au tourx
- Les entiers non valides sont traités comme
0
.
une chaîne contenant votre mémoire de ce tour que vous souhaitez conserver. Notez que le stockage de la mémoire n'est pas une partie cruciale du défi . Vous pouvez faire de bonnes entrées sans stocker de données utiles dans la chaîne. Au premier tour, la chaîne sera une chaîne vide.
Votre méthode ne devrait pas prendre plus de 10 ms par tour en moyenne dans un match.
- Le non-respect régulier du délai entraîne la disqualification.
Notation
- Gagner un match rapporte 2 points et un match nul rapporte 1 point aux deux joueurs. La perte ne rapporte aucun point.
- Le score d'un bot sera le nombre total de points qu'il a collectés.
- Le nombre de matchs joués entre chaque paire de candidats dépendra du nombre de participations et de leur vitesse.
Deux exemples de robots simples sont affichés comme réponses.
Le contrôleur et les deux premiers robots sont disponibles ici .
Résultats des tests avec des bots soumis jusqu'au 3 novembre:
Scores totaux:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Le contrôleur est basé sur le contrôleur du défi Cat catcher . Merci pour @flawr de le fournir comme base pour celui-ci.)
Bonus: un joli film de 6 minutes basé sur un concept similaire.
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
Qu'est-ce que "passer par un tour"?