Liar's Dice est un jeu de dés assez simple. J'ai vu quelques variantes différentes des règles, mais voici la version que je connais le mieux:
- Chaque joueur commence avec 5d6
- Sauf lors du décompte des dés à la fin d'un tour, chaque joueur peut voir ses propres dés, mais pas ceux de n'importe quel adversaire
- Au début d'un tour donné, tous les joueurs lancent les dés qu'ils ont actuellement
- Ensuite, un joueur (généralement, c'est soit le vainqueur du tour précédent OU le joueur à gauche du joueur qui a commencé la dernière fois; nous utiliserons le premier pour ce KotH; avec un joueur aléatoire commençant le premier tour) fait une estimation du nombre d'un nombre particulier sur la table (ONES SONT SAUVAGES)
- Les enchères se poursuivent vers la droite, en augmentant à chaque fois (par exemple; 3 cinq, 3 six et 4 deux sont tous supérieurs à 3 fours, mais 3 trois ne le sont pas; 4 unités est également plus élevé mais enchérir sur celles-ci vous mettra probablement à un désavantage); jusqu'à ce qu'un joueur appelle le joueur qui les précède un menteur
- À ce stade, tous les joueurs révèlent leurs dés et comptent le numéro du dernier numéro mis sur la table.
- Si le total est inférieur à l'enchère, le joueur qui a fait l'enchère doit donner un dé au joueur qui les a appelés menteurs, sinon, le joueur qui a appelé l'enchérisseur un menteur doit donner un dé au soumissionnaire (pour que l'enchérisseur gagne si leur nombre est au moins égal à celui qu'il avait proposé, il n'est pas nécessaire qu'il y ait le nombre exact)
- Lorsque vous manquez de dés, vous perdez
- Le dernier joueur debout gagne
Par exemple:
Le joueur un a 1,1,2,4,6 Le joueur deux a 1,2,2,3,5 Le joueur trois a 1,3,3,4,6 Joueur un: trois six. Joueur deux: quatre deux. Joueur trois: quatre à trois. Joueur un: cinq deux. Joueur deux: six deux. Joueur trois: six à trois. Joueur un: six quatre. Joueur deux: menteur! Ils révèlent leurs dés et comptent ceux (parce que ceux sont sauvages) et les quatre. Il s'avère qu'il y a, en fait, exactement six fours. Donc, le joueur deux donne un dé au joueur un. Ils relancent et le joueur n ° 1 commence le tour suivant.
Vous devez écrire un bot pour jouer à ce jeu. Il doit implémenter la classe java abstraite suivante:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- Vous devez implémenter la méthode d'enchères
- Le premier argument est la position actuelle de votre bot dans l'ordre du tour, le second est un tableau montrant combien de dés chaque joueur (y compris vous-même) possède actuellement, le troisième est un tableau montrant les valeurs actuellement affichées sur vos propres dés, et le quatrième est un tableau de toutes les offres faites depuis le début du tour en cours - aura une longueur de 0 si vous faites la première enchère du tour
- La sortie doit être soit une chaîne de la forme "numéro face", soit la chaîne "Liar!" appeler le soumissionnaire précédent un menteur.
- Si votre sortie est formatée illégalement, vous serez éliminé.
- Vous pouvez remplacer la méthode toString, mais ce n'est pas obligatoire. Cependant, vous ne pouvez pas le modifier d'une manière qui interfère avec la lisibilité de la sortie du contrôleur.
- Vous êtes autorisé à appeler toute autre méthode publique du contrôleur, mais pas sa méthode principale.
- Vous pouvez lire et modifier uniquement les fichiers du répertoire en cours d'exécution préfixés par le nom de votre bot
- Vous n'êtes pas autorisé à prendre des informations provenant d'une autre source
- Les variables d'instance sont réinitialisées au début de chaque nouveau jeu, mais pas les variables statiques.
Notation
- Un jeu de 1000 jeux, avec 3-5 joueurs dans chacun, sera simulé chaque fois qu'un bot est ajouté (dès que trois bots ou plus ont été soumis), marqué comme indiqué dans la source du contrôleur (dans un jeu donné, vous obtenez 1 au début de chacun de vos tours, 10 à chaque fois que vous capturez un dé et 1 000 bonus si vous gagnez); appliquer une limite de 5 000 TOURS (pas de tours) à chaque partie.
- Votre bot sera marqué par son score de la dernière série de jeux; plus dix fois son score de vote, si non négatif. (Ce dernier est peu susceptible d'avoir un effet significatif sur le score)
La source du contrôleur peut être trouvée ici.
Scores au 19/06/2015:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
popularity-contest
king-of-the-hill
java
SuperJedi224
la source
la source
diceEachPlayerHas[yourId]
= votre nombre de dés, etbids[yourId]
est votre première enchère (ou nulle si c'est votre premier tour). Est-ce exact?Réponses:
Personne
Tente de deviner les dés des autres joueurs. Appelle les autres robots menteurs s'il ne sait pas quoi faire.
Edit: correction d'un problème où personne n'enchérissait pour toujours, n'appelant jamais Liar.
la source
Badnomial, le bot qui prend de mauvaises décisions en se basant sur les distributions binomiales: Edit: correction d'une erreur stupide dans les calculs de probabilité, qui représente désormais le prochain enchérisseur ainsi que le précédent.
Il essaie de déterminer s'il doit bluffer ou appeler Liar en fonction des distributions binomiales cumulatives estimées pour lui-même et des chances des soumissionnaires précédent et suivant d'avoir leurs dés nécessaires présents.
Fondamentalement, il appelle menteur si le soumissionnaire précédent est très susceptible d'être un menteur ou s'il estime que lui et le prochain soumissionnaire mentent plus probablement qu'improbable.
la source
Bon tireur
Il joue droit et ne bluffe pas. Il est également assez naïf pour penser que les autres le font aussi, donc il n'appelle jamais menteur à moins que l'enchère ne dépasse le nombre total de dés en jeu (moins ses propres dés qui ne correspondent pas à l'enchère).
Pour être un peu plus conservateur que le nombre exact prévu pour chaque dé, il ne compte pas ses propres jokers, mais suppose que les autres ont une distribution uniforme. Avec les quatre joueurs actuels, lui ou MostlyHonestAbe est venu en premier à chaque fois, avec des scores assez proches.
Je suppose que l'enchère minimale est
2 2
. Si une enchère d'un dé (ou des enchères) est autorisée, faites-le moi savoir afin que je puisse faire ce changement.la source
Généralement honnête
Abe fait des suppositions conservatrices sur le reste des adversaires qui meurent, puis reste honnête jusqu'à ce qu'il ne pense pas qu'il y ait suffisamment de dés pour battre l'offre actuelle. À ce stade, il bluffe une fois, puis appelle menteur la prochaine fois.
la source
Dr house
Tout le monde ment!
la source
Fidelio
Ce bot sait que seule sa valeur la plus récurrente le mènera à la victoire, alors il s'y tient. Il suppose qu'il y a une portion des dés de tout le monde qui est la même que la sienne, si quelqu'un offre plus que cette portion, il suppose qu'il est un menteur.
J'espère qu'il fera du bon travail :).
la source
Statisticien
Vous avez 1/3 de chance d'avoir un nombre autre que des as. Un gars m'a dit une fois que ne pas vérifier vos dés et simplement connaître les cotes pouvait vous faire gagner ce match. EDIT: L'enchère était trop élevée. Mais cela n'améliore pas beaucoup le score.
la source
Absurde Bot
Affirme que tous les dés sont des 6 à moins que ce ne soit pas possible. Si le bot ne peut pas faire cela, cela signifie que c'est une situation impossible ou presque impossible. Pour cette raison, il appelle menteur. Je suis curieux de savoir à quel point ce bot sera efficace.
la source
Le pirate
J'ai fait quelques bots simples en testant le contrôleur, et c'est le seul qui soit vraiment bon.
Sera probablement amélioré plus tard.
la source