Chaque joueur a un numéro. Le vôtre peut-il être le plus éloigné de tous?
Exigences
Écrivez une fonction Java, Python 2 ou Ruby nommée choose()
qui accepte trois arguments:
- un entier - le nombre de tours déjà terminés
- un entier - le nombre de joueurs
- un tableau de chaînes - les résultats de chaque tour précédent
- chaque chaîne est une liste d'entiers séparés par des espaces, triés du plus bas au plus élevé
Par exemple, choose(2, 4, ["4 93 93 174", "1 84 234 555"])
signifie:
- il y avait déjà deux tours (c'est le troisième tour)
- il y a un total de quatre joueurs
- au premier tour, les nombres choisis étaient 4, 93, 93, 174
- au deuxième tour, les nombres choisis étaient 1, 84, 234, 555
Vous devez renvoyer un nombre entier de 1 à 999 (inclus).
Pour chaque autre joueur, votre score est la racine carrée de la distance entre votre numéro et le leur. Votre score pour le tour est le total de tous ces scores.
100 tours seront joués. Le score total le plus élevé gagne!
Règles
- Votre code ne doit pas utiliser d'E / S, y compris la console, les fichiers, le réseau, etc.
- Vous ne pouvez pas interférer avec le programme de contrôle ou tout autre joueur.
- Les programmes qui semblent enfreindre les règles ci-dessus seront exclus.
- Chaque appel d'une fonction devrait prendre moins de cinq secondes sur mon ordinateur (Intel Core i5 2450M avec 8 Go de RAM).
- Si un programme lève une exception ou renvoie une valeur non valide, il sera traité comme s'il renvoyait 1.
- Chaque utilisateur peut soumettre au plus un programme.
Divers
- Le programme de contrôle est sur GitHub .
- Il y a trois joueurs intégrés. Ils peuvent être trouvés dans cette réponse .
- Le gagnant sera choisi le 28 janvier.
Classement
Le gagnant est Conservateur .
Mention honorable à Gustav , le meilleur joueur avec une stratégie non constante.
- Conservateur - 36226
- Élevé - 36115
- FloorHugger - 35880
- NumberOne - 35791
- Surestimateur - 35791
- Gustav - 35484
- Historien - 35201
- Échantillonneur - 34960
- Incrémenteur - 34351
- JumpRightIn - 34074
- Vickrey - 34020
- Adolescent - 33907
- Randu - 33891
- Haltérophile - 33682
- Intermédiaire - 33647
- BounceInwards - 33529
- NastyMathematician - 33292
- Pull - 33244
- Copycat - 33049
Les résultats complets peuvent être trouvés ici . (Je recommande de désactiver l'habillage du texte.)
king-of-the-hill
Ypnypn
la source
la source
Réponses:
Python, conservateur
Étant donné que chaque exception lance 1, il reste le plus loin possible d'elle. Fait fortune aux dépens des faibles.
Fait amusant: j'ai pensé à l'améliorer, mais je n'ai pas pu trouver de meilleur moyen que de me cacher dans un coin.
la source
Numéro un, Java
Le nom explique complètement celui-ci.
la source
Python, AncientHistorian
Est fermement convaincu que l'avenir sera exactement comme le passé, mais estime que le dernier cycle est trop récent pour être historique, il passe donc de 1 à 999 et choisit ce qui aurait été le meilleur des cycles précédents, à l'exception du dernier. Les 2 premiers tours retournent 500.
la source
Python, Vickrey
Fait une liste de numéros qui ont été joués souvent, suppose que tout le monde jouera de manière optimale et opte pour le deuxième meilleur choix étant donné la liste.
Par exemple, si les nombres les plus courants sont
[1, 990, 999]
, alors Vickrey insère le jeu optimal 200 à donner[1, 200, 990, 999]
, puis choisit la meilleure option pour le nouveau tableau (qui est 556).la source
Java, surestimateur
Comme son nom l'indique, ce programme suppose que tous les autres programmes essaieront de jouer "bien" en choisissant la meilleure réponse sur la base du dernier tour - donc ce "surestimateur" choisit toujours la pire position possible sur la base du tour précédent.
la source
Java - Haltérophile
Boucles de 1 à 999 pour déterminer laquelle serait la meilleure pour chaque tour. Les pondère en fonction de la récence (les derniers tours ont plus de poids) et renvoie sa meilleure estimation globale. Avec un peu de chance, si des motifs se forment plus tard, cela pourra se reprendre.
Edit: Maintenant avec + Inf% de récursion en plus! Ne pas pouvoir stocker / enregistrer / voir ce que vous avez choisi lors des tours précédents est un glisser. La prise en compte de vos propres contributions vous dérange lorsque vous essayez de comprendre ce que les autres vont faire. Alors, calculons-le! Cela va maintenant récuser pour comprendre ce qu'il a choisi au tour précédent et ignorer cela lors du calcul du prochain mouvement.
Notez qu'il ignore vraiment vraiment sa propre entrée du dernier tour, mais comme celui-ci est le plus élevé, il semble fonctionner correctement. Cela pourrait être corrigé avec un peu plus de travail, mais j'attendrai le classement pour voir s'il est nécessaire.
la source
Ruby, Copycat
Retourne simplement le numéro remporté la dernière fois.
la source
Ruby, JumpRightIn
C'est probablement la stratégie la plus simple. Il trouve le plus grand écart lors du dernier tour et choisit le numéro au milieu de cet écart.
la source
Gustav (Python 2)
Il s'agit d'une méta-stratégie assez simple, copiée sans vergogne à partir d'une de mes anciennes réponses dans un défi KotH similaire. Il prend en compte quelques stratégies simples, examine comment elles se seraient comportées au cours de tous les tours précédents, puis suit le score le plus élevé pour le tour suivant.
Je me rends compte maintenant que l'algorithme a encore quelques défauts. Par exemple, il pourrait continuer à "se poursuivre" parce qu'il ne distingue pas ses propres mouvements de ceux des adversaires. Cependant, je vais le laisser comme ça pour l'instant.
la source
Python, Randu
Numéros sélectionnés par le générateur de nombres aléatoires le plus mal conçu de tous les temps .
la source
Les trois programmes suivants sont intégrés.
Élevé (rubis)
Incrémenteur (Java)
FloorHugger (Python)
la source
Python, Sampler
Dans une liste de lieux, choisissez celui qui est le plus éloigné des numéros récemment utilisés, en ignorant le tour précédent.
la source
Java, BounceInwards
À partir de 1, il se rapproche progressivement de 500 tout en rebondissant entre l'option supérieure et inférieure.
la source
NastyMathematician (Java)
Examine les deux derniers tours (si les meilleurs nombres étaient 70 et 80, il affichera 90). C'est méchant car il essaie de prendre le plus de numéros possible pour gagner contre ses adversaires.
la source
Python - Je ne veux pas penser à un nom ...
Si la moyenne des nombres choisis lors des tours précédents est inférieure à 500, il choisit 999. Il choisit 1 sinon.
la source
Python, Middleman (d'après le restaurateur de @clabacchio)
Après avoir remarqué que le bord supérieur avait un score élevé (et surpassait le bord inférieur), je me demandais s'il pouvait y avoir quelque chose de pire que de se faire prendre au milieu.
la source
Pull (rubis)
Alterne entre le bas, le milieu et le haut. (5 500 995)
la source