Ce défi roi est basé sur le jeu télévisé Weakest Link . Pour ceux qui ne sont pas familiarisés avec le spectacle, le cœur de ce défi concerne le vote de votre choix :
- Si les autres joueurs sont plus intelligents que vous, alors vous avez moins de chance de gagner le pot.
- Si les autres joueurs sont plus stupides que vous, vous avez moins de pot à gagner.
Au début de chaque tour, le pot commence avec 0 $. Un groupe de 9 joueurs est formé et chaque joueur reçoit une Smartness unique allant de 1 à 9.
Au début de chaque tour, Pot += Smartness
pour chaque joueur encore dans le tour. Ensuite, les joueurs votent sur le joueur qu’ils souhaitent supprimer. Le joueur avec le plus de votes est supprimé. En cas d'égalité, le joueur le plus intelligent est gardé.
Lorsqu'il ne reste plus que 2 joueurs dans la ronde, ils s'affrontent dans une bataille d'esprits. La chance de gagner le joueur est Smartness/(Smartness+OpponentSmartness)
. Le joueur gagnant reçoit alors le pot entier.
Le joueur qui a reçu le plus d’argent à la fin de la partie gagne.
Entrée sortie
À chaque tour, vous recevrez la liste actuelle des adversaires. Vous aurez accès à votre intelligence et à l' historique de vote complet de tous les joueurs pour le tour via des fonctions de la classe Player.
En sortie, vous devez renvoyer un entier unique représentant le joueur pour lequel vous souhaitez voter (représentant son intelligence). Voter pour vous - même est autorisé (mais non recommandé).
Les tours de 9 se répètent jusqu'à ce que tous les joueurs aient joué au moins 1000 10000 tours et que tous les joueurs aient joué le même nombre de tours.
Vous pouvez trouver le contrôleur ici: https://github.com/nathanmerrill/WeakestLink
Pour créer un lecteur, vous devez étendre la classe Player et ajouter votre lecteur à la classe PlayerFactory. Votre classe doit suivre les règles suivantes:
Toute communication ou interférence avec un autre joueur (y compris vos autres joueurs du même type) est strictement interdite.
Les variables de réflexion et statiques (à l'exception des constantes) ne sont pas autorisées.
Si vous souhaitez utiliser le caractère aléatoire, j'ai fourni une
getRandom()
fonction dans la classe Player. Utilisez-le pour que les simulations puissent être déterministes.
J'ai fourni de nombreuses fonctions dans la classe Player pour un accès facile aux données. Vous pouvez les trouver en ligne sur Github . Votre joueur sera instancié à chaque nouveau tour. Les joueurs "stupides / suicidaires" sont autorisés (mais pas les joueurs avec la même stratégie).
Les scores
377195 WeakestLink.Players.PrudentSniper
362413 WeakestLink.Players.Sniper
353082 WeakestLink.Players.VengefulSniper
347574 WeakestLink.Players.AntiExtremist
298006 WeakestLink.Players.BobPlayer
273867 WeakestLink.Players.MedianPlayer
247881 WeakestLink.Players.TheCult
240425 WeakestLink.Players.Leech
235480 WeakestLink.Players.SniperAide
223128 WeakestLink.Players.Guard
220760 WeakestLink.Players.Anarchist
216839 WeakestLink.Players.RevengePlayer
215099 WeakestLink.Players.IndependentVoter
213883 WeakestLink.Players.SniperKiller
210653 WeakestLink.Players.MaxPlayer
210262 WeakestLink.Players.Bandwagon
209956 WeakestLink.Players.MeanPlayer
208799 WeakestLink.Players.Coward
207686 WeakestLink.Players.Spy
204335 WeakestLink.Players.Hero
203957 WeakestLink.Players.MiddleMan
198535 WeakestLink.Players.MinPlayer
197589 WeakestLink.Players.FixatedPlayer
197478 WeakestLink.Players.HighOrLowNotSelf
181484 WeakestLink.Players.RandomPlayer
165160 WeakestLink.Players.BridgeBurner
la source
src\WeakestLink
j'avais l'habitudejavac Game\*.java Players\*.java Main.java
de compiler etjava -cp .. WeakestLink.Main
de courir.Réponses:
Tireur d'élite
L’idée générale est de garder l’un des joueurs stupides (c’est-à-dire ceux que nous sommes plus susceptibles de vaincre lors de la mise au jeu) afin de récolter les points. Après cela, nous essayons de supprimer les autres joueurs de faible valeur pour augmenter le pot. Mais lorsque nous en arrivons aux joueurs intelligents, nous décidons d’enlever les plus dangereux au cas où notre stupide joueur serait enlevé. De cette façon, si nous n'avons pas quelqu'un à qui tirer, nous devrions trouver quelqu'un contre qui nous avons au moins une chance. De plus, comme nous votons toujours avec un joueur min ou max, je pense que nous sommes assez efficaces pour obtenir notre chemin.
la source
Prudent Sniper
Sniper , mais avec deux comportements spéciaux. La première est que s'il reste trois robots, et que Prudent Sniper est le plus intelligent, il votera pour le bot du milieu au lieu du moins intelligent. Cela lui permet de gagner encore quelques épreuves de force. L’autre comportement est que si le bot le plus intelligent se bat pour lui (voté pour cela ou le bot analogue la dernière fois) et que le moins malin ne l’est pas, il votera pour le plus intelligent en légitime défense.
la source
Le culte
Les joueurs cultes ont un système de vote légèrement ésotérique qui leur permet de s’identifier et de voter en tant que groupe, en utilisant uniquement le registre de vote. Étant donné que chaque membre de la secte sait voter, toute personne votant différemment est révélée en tant que non-membre et finit par être éliminée.
Le schéma de vote en un coup d'œil:
Le code:
Dernières pensées:
La secte passe maintenant au vote pour les joueurs les plus dangereux lorsqu'il ne reste plus que deux membres de la secte ou moins pour la mise au jeu. Je l' ai testé plusieurs fois avec
cult_cnt>1
et lescult_cnt>2
conditions et les victoires plus tard plus souvent.Néanmoins, il s’agit d’une précaution et le culte n’est pas conçu pour fonctionner en solo, alors, à mesure que le nombre de nouveaux joueurs augmentera, le culte devrait tout de même finir par disparaître.
la source
unusedPlayers.addAll(allPlayers);
dans Game.java soit dupliqué environ neuf fois, de sorte que tous les joueurs puissent apparaître dans une multiplicité variée (comme mélanger plusieurs jeux de cartes) ... non bien sûr, c'est une demande totalement biaisée mais Il est intéressant de voir à quel point la stratégie basée sur les équipes peut encore être puissante si elle a même une petite chance d'être mise sur pied.BridgeBurner
Ce n'est pas un endroit où je peux tester cela pour le moment, et cela est apparu comme un code vraiment moche / idiot, mais cela devrait fonctionner.
Ce bot veut juste être détesté. Il vote pour celui qui a le moins voté contre . En cas d'égalité des voix, il choisit celui qui a passé le plus de temps sans voter pour. En cas d'égalité, il choisit le plus intelligent (probablement parce qu'il fera le pire ennemi). Il ne votera pas pour lui-même, car personne ne le déteste vraiment quand il n'est pas là.
la source
-1
vote du joueur . Mais cela devrait être corrigé maintenant.Mouvement
Suit la foule en votant, à moins que ce ne soit celui qui est ciblé.
Je suppose que celui-ci rendra les tireurs d'élite plus forts en les suivant, mais évitera également d'être pris pour cible par la secte et les aides-tireurs d'élite de manière légèrement efficace. Cela peut aussi bien être un bouclier à viande pour les tueurs de tireurs d’élite ou les aider s’il y en a plus. (Besoin de tester avec les dernières mises à jour).
Utilisation de java 8 car le jeu en a besoin de toute façon.
la source
RevengePlayer
Ce bot votera pour celui qui votera pour lui le plus souvent, le départage sera le joueur le plus intelligent. La théorie est qu'un joueur qui a voté pour vous dans le passé votera probablement pour vous à nouveau.
la source
MeanPlayer
Ne votez ni pour les joueurs les plus stupides ni pour les plus intelligents, et il porte une arme à feu
la source
Anti-extrémiste
Ce socialiste extrémiste croit que tous les gens devraient faire preuve de la même intelligence. Il essaie de tuer ceux qui sont beaucoup plus intelligents ou plus stupides que lui. Il considère les deux mais il favorise la bêtise en général. Il favorise les gens stupides au début et intelligents à la fin, mais cela dépend de l'extrême extrême de ces gens.
REMARQUE: Selon Linus, le vote sera identique à celui du tireur d’élite dans l’immense majorité du temps (525602: 1228).
la source
static Sniper S = new Sniper()
etstatic long agrees=0, disagrees=0;
. Dans votre méthode de vote, j'ajouteS.setSmartness(getSmartness()); int sniper_answer=S.vote(currentOpponents);
une formule qui calcule comment un tireur d'élite votera à votre poste, puis place votre réponse dans une variable pour déterminer s'il est d'accord ou pas avant de renvoyer sa réponse. Une fois le jeu terminé, vous pouvez imprimer: accord: 525602: 1228.Espion
Spy est réservé. Il n'aime pas utiliser les armes pour les personnes les plus intelligentes. De même, il n'aime pas
s'attaquer auxidiots sans défense dequartata. Ainsi, il aime éliminer les plus proches de lui avec intelligence.Vous venez d'être poignardé, mes amis . Il s'en fiche s'il gagne. Il aime le son du couteau dans votre dos alors qu'il vous vote avec succès.
la source
Math.abs(enemyIntel - selfIntel) < closestIntel
devrait êtreMath.abs(enemyIntel - selfIntel) < Math.abs(closestIntel - selfIntel)
.MedianPlayer
Ce joueur tente d’être le plus méchant (bien, la médiane) qui reste.
Il vote pour éliminer les opposants les plus intelligents et les plus stupides (avec un léger parti pris pour le vote du plus intelligent), selon qu’il existe plus ou moins d'intelligent / plus stupide que lui-même.
cadre volé de manière flagrante à @ Linus ci-dessus.
la source
lâche
Veut simplement ne pas être voté, donc votez pour l'adversaire qui ressemble le plus au joueur qui a été voté lors du dernier tour afin de maximiser les chances de faire partie de l'équipe gagnante.
Ne fait pas particulièrement bien en ce moment, mais pourrait tout aussi bien le jeter dans le mélange.
la source
héros
Vole ceux qui s'en prennent au faible ... ou le dérangent.
la source
Bob
Bob est juste le gars moyen qui pense qu'il est plus intelligent, alors il l'est vraiment. Impossible de gagner la famille de tireurs d’élite , mais d’être la plupart du temps top 5 de mes simulations
la source
FixatedPlayer
Choisit une cible au hasard, puis vote pour eux jusqu'à ce qu'ils soient partis. Ne votera pas pour lui-même cependant.
la source
Statistiques
Ce n'est pas une inscription au concours. C'est simplement un moyen d'obtenir des statistiques utiles sur un match. Ces statistiques indiquent le pourcentage de probabilité qu'un joueur en particulier soit éliminé lors d'un tour.
Pour ce faire, ajoutez les lignes suivantes à
Round.java
afin que le haut du fichier ressemble à ceci:Puis modifiez la méthode de vote pour qu'elle ressemble à ceci:
Exemple de sortie:
la source
MaxPlayer
Un je-sais-tout. Préfère enlever toute personne à haute intelligence (qui peut donc défier son intellect inégalé)
la source
Garde
Votez ceux qui s'en prennent au fort ... ou ceux qui l'ennuient.
la source
Sangsue
S'appuie sur d'autres robots pour voter les types les plus intelligents et les plus stupides… en quelque sorte.
Il se contente de tourner quelque part au milieu et éventuellement diviser le pot avec le gagnant (puisqu'il est en fait un vraiment décent
garsbot).la source
SniperKiller
Une autre réponse volée sans vergogne dans le code de Linus . Celui-ci va tuer tous les tireurs d’élite, pas les protéger. S'il sait qu'il ne reste plus aucun tireur d'élite, il agira comme un tireur d'élite.
la source
RandomPlayer
la source
MinPlayer
Un élitiste. Préfère retirer toute personne peu intelligente.
la source
VengefulSniper
Cela a commencé comme quelque chose que je pensais être appelé à l'origine
StupidBuffering
(un nom que je détestais abandonner), pour finalement devenir un Prudent Sniper qui ne se souciait pas de savoir s'il était ciblé. Cela semblait aussi être la seule raison pour laquelle il ne pouvait pas battre Prudent Sniper, alors j'ai peaufiné un peu les choses pour en faire son objectif.Il s’agit en réalité d’un tireur d’élite, mais si le bot le plus intelligent ou le plus stupide le cible, il ciblera celui qui aura obtenu le plus de votes au dernier tour. S'ils ont tous deux obtenu le même nombre de voix et qu'ils l'ont tous deux pris pour cible, il revient au comportement normal du tireur d'élite. Dans mes tests, cette réalité bat parfois Prudent Sniper.
la source
Intermédiaire
Le MiddleMan fait de son mieux pour maximiser ses profits tout en gardant un œil prudent sur le fait qu’il n’est pas exclu du jeu. Il garde moins de concurrents pour améliorer ses chances de se qualifier pour le tour suivant (et pour laisser une finition facile). Il votera contre quelqu'un de plus intelligent que s'il existe plus de candidats plus intelligents qu'il n'y a de moins de candidats. Quel que soit l’un des deux groupes, il vote toujours pour le plus bas du groupe afin que le pot continue de grimper.
PS espère que ça compile, je ne suis pas un gars de Java.
Avait ce schéma en tête avant de lire les autres entrées. Ensuite, j'ai été surpris de voir à quel point Sniper était proche (mais très différent), alors j'ai décidé de l'utiliser et de l'utiliser comme point de départ, car je ne connais pas la syntaxe Java. Merci @ Linus
la source
Position approximative
Ce bot tente d’envisager approximativement les valeurs d’intelligence manquantes, en supposant que le groupe continue à suivre le même schéma, ce qui signifie qu’il ciblera le même type de cible. Il vote toujours pour le plus intelligent des deux joueurs quand il y a un choix.
Cela fait longtemps que je n’utilise pas Java et que je suis actuellement au travail.
À propos, il utilise awt.Point uniquement parce que je suis trop paresseux pour implémenter un tuple n_n.
la source
emptyPosition[emptyPosition.length]=j;
vous donnera toujours un tableau hors limites. Enfin, vous ne savez pas pourquoi, mais vous voterez pour des joueurs qui ne font pas partie du tour.emptyPosition[emptyPosition.length]
, c’est une erreur stupide car la longueur est toujours un sur le dernier index ^^. Merci pour les changements, je vais utiliser cette nouvelle version pour la corriger. À propos du bloc ternaire ... ouais, j'avais envie de l'utiliser, et peut-être trop habitué à écrire pour moi-même, n'était pas pratique pour lire, je suppose. Faire les corrections et le mettre à jour.SniperAide
Avant l’ajout de PrudentSniper, j’avais écrit un bot pour aider Sniper à vaincre AntiExtremist et d’autres fraudes (j’utilise le mot avec amour). Le bot SniperAide recherche les joueurs qui votent comme des tireurs d’élite et votent comme il le ferait s’il ya consensus. Si tous les joueurs ressemblent à des tireurs d’élite, il vote pour le maximum, protégeant ainsi les Snipers inférieurs (qui passeraient également au maximum à ce stade), même si c’est lui-même.
Le code :
Il n'est actuellement pas d'une grande aide contre Prudent Sniper.
la source
HighOrLowNotSelf
Supprime au hasard le joueur le plus faible ou le plus intelligent (mais pas soi-même).
la source
long
, notint
. Deuxièmement,ops
ne vous contient pas. (Si vous souhaitez voter pour vous-même, vous devez explicitement l'inclure). Enfin, le if / else que vous avez inclus n'est pas valide en Java. J'ai corrigé votre code et je l'ai ajouté à githubAnarchiste
L'anarchiste n'aime pas les régimes.
L'anarchiste va essayer de tuer le président actuel.
Si l'anarchiste est président, il décide d'abuser de son pouvoir et de tuer des peagents inutiles. À moins qu'il ne soit visé par l'un de ses inférieurs, ils devraient brûler à la place.
la source
IndependentVoter
Ce bot sait que la population en général a toujours tort! Donc, il vote pour celui qui obtient le moins de voix.
Le code est presque identique au "Bandwagon" de SolarAaron, mais la logique de fin est inversée.
la source