Ceci est basé sur ce défi et l'idée de Geobits / CarpetPython de l'améliorer:
Pour ce défi, la distance entre deux nombres est mesurée sur une boucle, donc, par exemple, la distance entre 0 et 999 est 1. Cela devrait empêcher des stratégies comme de toujours choisir le numéro le plus bas ou le plus élevé de gagner presque à chaque fois. Le seul autre changement est que le nombre le plus bas qui peut être choisi est désormais 0 au lieu de 1.
Je vais le résumer ici:
- Écrivez une fonction en Java, Python ou Ruby qui prend trois arguments:
- le nombre de tours joués jusqu'à présent
- le nombre de joueurs
- les nombres choisis dans les tours précédents, comme un tableau de chaînes séparées par des espaces
- Il doit renvoyer un entier de 0 à 999, inclus
- Le score d'un programme à chaque tour est la somme des racines carrées des distances par rapport aux nombres choisis par chaque autre programme
- Le programme avec le score le plus élevé après 100 rounds gagne.
- Une réponse par personne
Le programme de contrôle est ici:
https://github.com/KSFTmh/src/
Classement
NumberOne, de TheBestOne, gagne.
- NumberOne - 9700
- NumberOnePlusFourNineNine - 9623
- AncientHistorian - 9425
- FindCampers - 9259
- WowThisGameIsSoDeep - 9069
- Échantillonneur - 9014
- SabotageCampers - 8545
Apparemment, mon sabotage de campeur ... euh (?) Ne fonctionne pas très bien.
Voici les résultats complets: https://github.com/KSFTmh/src/blob/master/results-3
Je pense que c'est assez différent pour ne pas être un doublon.
Au fait, c'est la première fois que je pose une question sur Stack Exchange, alors faites-moi savoir si je fais quelque chose de mal.
Réponses:
Python 2, échantillonneur
Cette entrée est basée sur le même code pour Gardez vos distances, entrée Sampler . J'espère qu'il fera mieux ici où les avantages 1 et 999 n'existent pas.
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 (car d'autres entrées peuvent prédire sur la base du seul tour précédent).
la source
Number OnePlusFourNineNine, Java
La logique est vraiment simple. À moins que quelqu'un ne trouve un véritable algorithme qui prenne en compte les scores précédents, cette réponse est assez optimisée.
Maintenant que nous comptons la distance dans un cercle, la distance maximale de deux points peut être de 500. Maintenant, si toutes les entrées généraient des nombres aléatoires (ou pseudo-aléatoires en fonction d'un algorithme), cette réponse n'aurait aucun avantage du tout . Mais il y a au moins 1 entrée qui produit une réponse constante dont une distance presque maximale. Cela fait que le score est en faveur de 500 car il y a une source fixe de distance maximale possible à chaque tour :)
la source
AncientHistorian - Python
Il s'agit du même algorithme que le précédent, sauf lors du calcul des scores potentiels, il utilise la distance circulaire. Comme je perds horriblement et que je n'arrive pas à compiler le contrôleur, j'essaie simplement une nouvelle stratégie, où j'utilise le pire des tours précédents.
la source
i
est un élément descores.split(' ')
, ce qui signifie que c'est une chaîne, pas un entier.SabotageCampers - Python
Les campeurs gagnent toujours. Faites-moi savoir si vous avez des suggestions à ce sujet.
la source
FindCampers - Python 2
Trouvez tous les campeurs des 10 derniers tours et restez loin d'eux. J'espère que les prédicteurs vont fuir de moi. Je vais maintenant ignorer mes anciens choix.
la source
Numéro un, Java
La première réponse. Copié de ma réponse précédente .
la source
WowThisGameIsSoDeep, Java
J'ai analysé le jeu pendant 10 ans sur un cluster à 1 million de cœurs et trouvé la solution optimale.
la source
Random.nextInt(int)
.Extrapolateur circilinéaire, Ruby
la source
NoMethodError: undefined method `split' for #<Array:0x720f56e2> choose at CircilinearExtrapolator.rb:2
previous_choices
un tableau de valeurs comme["1 6 500","2 8 503"]
?