Règles de base (différentes des miennes)
Récit
C'est l'année 4579, les humains ont maintenant 2 mains avec 1001 doigts chacune. Les baguettes sont devenues basées sur des points. Et @Dennis a plus de représentants que @Martin ... Les cercles rouges dessinés à la main sont maintenant sous-votés ... Jon Skeet a atteint 2 billions de représentants sur chaque site SE ... Ouais, effrayant je sais
Chopsticks est un jeu de main qui a été résolu. Donc, pour contourner cela, je l'ai créé muté. J'ai augmenté le nombre de doigts.
Règles du jeu
La façon dont cela se joue
Tout le monde commence avec 2 mains. Chaque main a 1001 doigts. Chaque main commence avec 1 (un) doigt sur chaque main. Pendant votre tour, vous pouvez "toucher" la main des autres joueurs. Pour vous frapper, choisissez 1 de vos mains pour frapper et 1 de leurs mains pour frapper. La main qui a été frappée a maintenant la quantité de doigts qui était la leur au début ET la quantité de doigts que vous aviez sur la main avec laquelle vous avez frappé.
EX
P1: 1,1
P2: 1,1
. P1[0]
frappe P2[1]
. Maintenant, les doigts le sont P1:1,1
P2:1,2
. Maintenant P2[1]
frappe p1[0]
. Les doigts sont maintenant P1: 3,1
P2 1,2
.
Si une main atteint 1001 doigts ou plus, cette main est sortie. Le joueur qui a reçu une main (pour son tour) peut alors "se séparer". Le fractionnement consiste à prendre la main qui est dedans et à diviser par deux le nombre de doigts (arrondir) et à donner ces doigts à l'autre main pour la remettre en place.
EX
P1: 1000,2
P2 7,7
. P2[0]
frappe P1[0]
. Le score est P1: 0,2
P2 1,1
. P1[1]
se divise pour son tour et le score est P1: 1,1
et P2 7,7
.
Le jeu se termine lorsqu'un joueur a les deux mains. Les points sont marqués par le nombre de doigts du gagnant. Plus de points = mieux. Le perdant ne gagne aucun point.
Il existe d'autres règles qui sont utilisées, mais ce sont celles utilisées ici.
Tout le monde joue tout le monde (tournoi à la ronde)
Fin du jeu
Faites le total de vos points à chaque tour que vous gagnez. Ensuite, augmentez la moyenne des points de tout le monde. Divisez votre total par la moyenne des points et obtenez votre score final. La plupart des points gagnent.
Règles réelles
S'il vous plaît ne pas essayer de résoudre le jeu. Je dois en fait pouvoir l'exécuter: P
Assurez-vous que le bot peut fonctionner rapidement. Avec la longueur des tours, cela prendra un certain temps
Toutes les bibliothèques nécessaires à votre programme doivent se trouver dans la bibliothèque python par défaut. Indiquez également ceux dont vous avez besoin d'importer. Les importations seront juste l'importation de base (pour les mathématiques que je fais: import math
)
Les réponses doivent fonctionner dans Python 3.x
Gestionnaire
Votre bot sera son propre fichier Python 3 avec une play
fonction.
play
sera passé deux listes de deux numéros chacun. Ce nombre indique le nombre de doigts sur chaque main. La première liste est votre propre main.
Si vous choisissez de frapper la main de l'autre joueur, renvoyez une liste de deux bits. Le premier bit est l'indice de la main que vous utilisez pour frapper ( 0
pour le premier, 1
pour le dernier), et le deuxième bit est l'indice de la main que vous frappez sur l'adversaire.
Si vous choisissez de vous séparer, renvoyez toute autre valeur véridique.
Tada!
Le contrôleur peut être trouvé ici . Enregistrez chaque bot dans son propre fichier et répertoriez le nom de fichier de chaque bot (sans .py
) dans botnames
.
Note finale:
Vous et l'autre bot irez à tour de rôle en premier. Si le jeu ne se termine pas en 100 000 (cent mille) tours, le jeu sera terminé et aucun des bots ne gagnera.
Le contrôleur n'est pas protégé contre les mouvements qui prennent une éternité, mais les frais généraux inutiles seront fortement désapprouvés.
la source
My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!
Quoi, donc c'est nous qui faisons les calculs pour le KoTH?Réponses:
CodingAndAlgorithms
Cette réponse utilise en fait du codage et des algorithmes, contrairement aux autres jusqu'à présent! référence: imgur (bat également toutes les réponses postées avant cela)
la source
CautionBot
CautionBot ne veut pas causer trop de problèmes, il frappe donc la plus petite des mains de l'adversaire avec sa plus petite main s'il a les deux mains, et sinon se divise. Cependant, CautionBot n'est pas un imbécile, donc s'il peut retirer la main d'un adversaire sans perdre immédiatement le prochain tour, il le fera au lieu de son mouvement normal.
la source
Égaliseur
S'il manque une main à l'égaliseur, il se divisera. Sinon, il frappe la plus petite main de son adversaire avec sa propre plus grande main.
la source
Agresseur
Un autre bot de départ, Aggressor frappera la plus grande des mains de l'adversaire avec la plus grande de ses propres mains si ses deux mains ne sont pas vides; sinon, il se divise.
la source
RandomBot
Juste pour commencer, voici un bot qui fait un coup aléatoire si ses mains ne sont pas vides; sinon, se divise.
Golfé parce que pourquoi pas: 3
la source
Erreur
Oui, c'est le nom du bot.
J'y suis arrivé en testant avec les autres bots. Cependant, il est toujours l'avant-dernier dans mes simulations. Alors je vais finir par faire un autre bot.
Edit: Je n'arrive pas à écrire un bot qui bat CautionBot, et mes tests supplémentaires semblent indiquer que c'est le deuxième meilleur, pas le deuxième pire.
la source
Marathonien
J'ai modifié le code d'Aggressor fourni par "HyperNeutrino" pour frapper simplement la plus petite des deux mains de l'adversaire avec la plus petite de ses mains. C'est une stratégie très stupide bien sûr mais je ne peux pas refuser d'être en haut d'un graphique! (Même si ce graphique serait des pertes)
Je ne sais pas si ce code s'exécutera sans erreur car je n'ai pas pu le tester en raison de mon travail. Cependant, il devrait fonctionner parfaitement.
la source