Résultats - 19 juillet 2014
Le roi de la colline actuel est Mercenary par l'utilisateur Fabigler ! Continuez à envoyer des entrées et renversez-le de son trône!
Cliquez ici pour voir le tableau de bord.
Les programmes soumis au plus tard le 19 juillet 2014 ont été inclus. Toutes les autres soumissions seront incluses dans les essais futurs. Les nouveaux résultats devraient être publiés vers le 9 août, ce qui vous laisse suffisamment de temps.
Illustré par Chris Rainbolt, mon frère et une nouvelle diplômée du Savannah College of Art and Design
introduction
Les anges et les démons se battent et, comme d'habitude, utilisent la terre comme champ de bataille. Les humains sont coincés au milieu et sont obligés de prendre parti. Une force neutre inconnue récompense ceux qui se battent toujours pour le côté des perdants.
Le jeu
À chaque essai, vous serez jumelé de manière pseudo-aléatoire, puis mélangé avec 20 à 30 autres soumissions. Chaque essai consistera en 1000 tours. À chaque tour, vous recevrez une entrée et vous devrez produire une sortie. Votre sortie sera enregistrée et notée. Ce processus sera répété 1000 fois.
Contribution
Vous recevrez un seul argument qui représente les votes passés de chaque joueur. Les tours sont délimités par une virgule. A 0
représente un joueur qui a pris le parti de Evil ce tour. A 1
représente un joueur qui a pris le parti du bien. Dans un essai, les joueurs seront toujours dans le même ordre. Votre propre vote sera inclus, mais pas explicitement identifié. Par exemple:
101 100 100
Dans cet exemple, trois tours ont été complétés et trois joueurs sont en compétition. Le joueur 1 a toujours pris le parti du Bien. Le joueur 2 a toujours pris le parti du Mal. Le joueur trois a basculé du bon du tour 1 au mal des tours 2 et 3. L'un de ces joueurs était vous.
Sortie
Soumissions Java
- Renvoyez la chaîne
good
si vous voulez vous associer à Good. - Renvoyez la chaîne
evil
si vous souhaitez vous associer au mal.
Soumissions non Java
- Générez la chaîne
good
sur stdout si vous souhaitez vous associer à Good. - Exportez la chaîne
evil
sur stdout si vous souhaitez vous associer à Evil.
Si votre programme génère ou renvoie autre chose, lève une exception, ne compile pas ou prend plus d'une seconde pour générer quoi que ce soit sur cette machine exacte , il sera alors disqualifié.
Notation
Les scores seront publiés dans une feuille de calcul Google Documents pour faciliter la visualisation dès que je pourrai compiler toutes les entrées actuelles. Ne vous inquiétez pas, je continuerai à faire des essais aussi longtemps que vous continuerez à soumettre des programmes!
- Vous recevez 3 points si vous vous alliez avec la majorité pendant un tour.
- Vous recevez n - 1 points si vous vous associez à la minorité pendant un tour, où n est le nombre de fois consécutives où vous vous êtes rangé du côté de la minorité.
Votre score sera la médiane de 5 essais. Chaque essai comprend 1000 tours.
Livrables
Soumissions non Java
Vous devez soumettre un titre unique, un programme et une chaîne de ligne de commande Windows qui exécutera votre programme. Rappelez-vous qu'un argument peut être ajouté à cette chaîne. Par exemple:
python Angel.py
- Notez que celui-ci n'a pas d'arguments. C'est le premier tour! Soyez prêt pour cela.
python Angel.py 11011,00101,11101,11111,00001,11001,11001
Soumissions Java
Vous devez soumettre un titre unique et une classe Java qui étend la classe humaine abstraite écrite ci-dessous.
public abstract class Human {
public abstract String takeSides(String history) throws Exception;
}
Essai
Si vous souhaitez tester votre propre soumission, suivez les instructions ci- dessous .
Notes complémentaires
Vous pouvez soumettre autant de soumissions différentes que vous le souhaitez. Les soumissions qui semblent collusoires seront disqualifiées. L'auteur de cette contestation sera le seul juge en la matière.
Une nouvelle instance de votre programme ou classe Java sera créée à chaque appel. Vous pouvez conserver des informations en écrivant dans un fichier. Vous ne pouvez pas modifier la structure ou le comportement de quoi que ce soit à l'exception de votre propre classe.
Les joueurs seront mélangés avant le début du procès. Demon et Angel participeront à tous les essais. Si le nombre de joueurs est pair, Petyr Baelish rejoindra également. Demon se bat pour le mal, Angel pour le bien et Petyr Baelish choisit un côté pseudo-aléatoire.
la source
Réponses:
Le mercenaire
Toujours du côté de celui qui a payé le plus d'argent lors du dernier tour.
En prenant en compte que les bonnes personnes gagnent statistiquement plus.
la source
Hipster, rubis
Tout simplement avec la minorité du dernier tour, simplement parce que tout le reste est grand public.
Courir comme
la source
Petyr Baelish
Vous ne savez jamais de quel côté est Petyr Baelish.
Cette entrée ne sera incluse que si le nombre de joueurs est pair. Cela garantit qu'il y aura toujours une majorité.
la source
C ++, le méta-scientifique
Celui-ci fait essentiellement la même chose que The Scientist, mais ne fonctionne pas sur les rondes dans leur ensemble, mais sur les joueurs individuels. Il essaie de mapper une vague (ou une fonction constante) sur chaque joueur séparément et prédit son déplacement au tour suivant. Sur la base de la prédiction du tour, Meta Scientist choisit le côté qui ressemble le plus à une majorité.
Si vous souhaitez activer des instructions de débogage, modifiez la ligne de lecture
#if 0
à#if 1
.Compilez avec
g++ -O3 -std=c++0x -o MetaScientist MetaScientist.cpp
(vous n'avez pas besoin d'avertissements, donc non-Wall
) et exécutez avecMetaScientist.exe
(éventuellement avec l'argument bien sûr). Si vous le demandez vraiment, je peux vous fournir un exécutable Windows.EDIT: Apparemment, la version précédente a manqué de temps environ 600 tours dans le jeu. Cela ne devrait pas faire ça. Sa consommation de temps est contrôlée par la
#define WINDOW (...)
ligne, plus elle est lente mais plus lointaine.la source
ange
Le joueur le plus pur de tous.
Programme
Commander
la source
Artemis Fowl
Dans le livre 7, The Atlantis Complex , Artemis Fowl a contracté une maladie psychologique (appelée complexe Atlantis) qui l’a obligé à tout faire par multiples de 5 (paroles, actions, etc.). Lorsqu'il n'a pas pu le faire dans un multiple de 5, il a paniqué. Je fais fondamentalement cela: voir si le bien ou le mal (biais intentionnel) est divisible par 5, si ni l’un ne l’est, alors je panique et vois ce qui était le plus grand et couru avec cela ou panique encore plus loin et choisit au hasard.
la source
break;
dans votreswitch
.Parnumerophobe
Les nombres impairs sont terrifiants.
la source
Linus, Ruby
Cherche à confondre les analystes en brisant toujours le schéma .
Enregistrer sous
linus.rb
et courir avecruby linus.rb
la source
Le BackPacker
Détermine le joueur qui a le plus choisi la minorité correspondante et choisit son dernier vote.
La fouleFollower
Détermine un joueur qui a choisi le plus souvent la majorité correspondante et choisit son dernier vote.
la source
goWithMajority = true
et l'autre où c'estfalse
. Est-ce correct ou dois-je ajouter un second BackPacker pour cela?Diseuse de bonne aventure
Ce travail est toujours en cours. Je ne l'ai pas encore testé. Je voulais juste savoir si le PO pensait qu'il enfreignait les règles ou non.
L'idée est de simuler le prochain tour en exécutant plusieurs fois tous les autres participants pour obtenir une probabilité du résultat et agir en conséquence.
la source
C ++, le scientifique
Celui-ci tente, avec l'historique de ce que la majorité a choisi par tour
wave
(majority()
donne le choix de la majorité sur un tour), d'ajuster une onde aux données, de longueur d'onde2*period
et de phasephase
. Ainsi, étant donné0,1,1,1,0,1,0,1,1,1,0,0,0,1,0
qu'il sélectionneperiod=3, phase=5
(maxat=={3,5}
): ses scores deviennent9 3 11 5 5 3 5 7 9 7 7 7 7 7 7
. Il boucle sur toutes les périodes possibles et si, pour cette période, le score est supérieur à celui du maximum actuel, il enregistre les événements{period,phase}
pour lesquels cela s'est produit.Il extrapole ensuite la vague trouvée au tour suivant et prend la majorité prédite.
Compilez avec
g++ -O3 -std=c++0x -o Scientist Scientist.cpp
(vous n'avez pas besoin d'avertissements, donc non-Wall
) et exécutez avecScientist.exe
(éventuellement avec l'argument bien sûr). Si vous le demandez vraiment, je peux vous fournir un exécutable Windows.Oh, et n'ose pas jouer avec le format d'entrée. Cela ferait des choses étranges autrement.
EDIT: Apparemment, la version précédente a manqué de temps environ 600 tours dans le jeu. Cela ne devrait pas faire ça. Sa consommation de temps est contrôlée par la
#define WINDOW (...)
ligne, plus elle est lente mais plus lointaine.la source
Coureur de code
Donc, pour rendre les choses intéressantes, j'ai créé un script pour télécharger automatiquement le code de chaque réponse postée, le compiler si nécessaire, puis exécuter toutes les solutions conformément aux règles. De cette façon, les gens peuvent vérifier comment ils vont. Sauvegardez simplement ce script dans run_all.py (nécessite BeautifulSoup), puis:
Quelques choses:
def submission_type(lang)
.CPPSubmission
). Le type de langue est extrait de la balise meta code< !-- language: lang-java -- >
. Veillez donc à l'ajouter si vous souhaitez que votre code soit exécuté (supprimez les espaces supplémentaires avant et après le <>). MISE À JOUR : Il existe maintenant une inférence extrêmement basique pour essayer de détecter la langue si elle n'est pas définie.blacklist.text
et sera automatiquement supprimé des prochains essais. Si vous corrigez votre code, supprimez simplement votre entrée de la liste noire et relancez-laget
,Langues actuellement supportées:
Sans plus tarder:
la source
Le bel esprit, Ruby
Prend sa décision en se basant sur des motifs d'importance discutable dans la représentation en bits du dernier tour
Courir comme
la source
Piustitious, Lua
Un programme superstitieux qui croit en Signs and Wonders.
lancez-le avec:
suivi de l'entrée.
la source
Les winchesters
Sam et Dean sont bons (la plupart du temps).
la source
9:1
est le bon ratio? Peut-être devrions-nous faire une exploration de données et obtenir un ratio plus précis?9:1
ça me semble correct;)Statisticien
la source
Math.ceil(Math.random()-Math.random())
vous pouvez aussi faire justeMath.round(Math.random())
.R, un bot un peu bayésien
Utilisez la table de fréquences pour chaque utilisateur comme probabilité antérieure de la sortie des autres utilisateurs.
Invoqué en utilisant
Rscript BayesianBot.R
suivi de l'entrée.Edit : Juste pour clarifier ce que cela fait, voici une étape par étape avec l'exemple de saisie:
Ensuite, la ligne commençant par
result<-
, pour chaque joueur, choisit aléatoirement 0 ou 1 en utilisant cette dernière table comme poids (c.-à-d. Pour le joueur 1, la probabilité de choisir 0 est de 2 / 7ème, de 1 5/7, etc.). Il choisit un résultat pour chaque joueur / colonne et renvoie finalement le nombre qui a fini par être le plus commun.la source
Suisse
Soutient toujours la neutralité. Condamné à ne jamais gagner.
la source
HAL 9000
Edit: c'est peut-être plus approprié pour HAL 9000, mais faites attention! C'est très mauvais. Je recommande
cd
de vider le répertoire avant de l'exécuter.Invocation pas si évidente:
En M $
En * nix
la source
Volonté de la majorité
Enregistrez-le sous
WotM.py
, lancez commepython3 WotM.py
suit l'entrée.Un programme simple, juste pour voir comment ça va se passer. Va avec ce que la majorité a dit la dernière fois, ou bien au hasard.
la source
Alan Shearer
Répète ce que la personne à côté de laquelle il est assis vient de dire. Si la personne se trompe, elle passe à la personne suivante et répète ce qu'elle dit.
la source
lastRound
avant même de la déclarer. En outre, vous avez ajouté des parenthèses à tous vos éléments,String.length
mais ce n'est pas une fonction. Pouvez-vous obtenir votre soumission à un point où elle sera compilée?lastRound.length
est toujours utilisée (dans le premier if) avantlastRound
est déclarée (dans le cas contraire). Essayez de compiler (et éventuellement d’exécuter) votre code avant de le soumettre ici.Plus tard, le mal, JavaScript ( node.js )
Mesure la durée entre les exécutions. Si le décalage horaire est plus grand que la dernière fois, il doit être malfaisant. Sinon, bien.
Courir avec:
node laterisevil.js
la source
Pattern Finder, Python
Cherche un motif récurrent, et s'il ne peut pas en trouver un, va simplement avec la majorité.
courir avec
la source
Le turncoat
Turncoat pense que, à cause des autres combattants jusqu'à présent, la majorité alternera plus souvent après chaque tour entre le bien et le mal qu'elle ne restera pas du même côté. Ainsi, il commence le premier tour en se rangeant arbitrairement avec bon, puis alterne tous les tours pour tenter de rester le plus souvent dans l'équipe gagnante ou perdante.
Après avoir écrit ceci, je me suis rendu compte qu'en raison des entrées basées sur une analyse statistique, l'élan obligerait la majorité à changer de côté moins à mesure que plus de tours avaient été effectués. Par conséquent, le lazy turncoat.
Le Turncoat Lazy
Le Lazy Turncoat commence comme le Turncoat, mais à mesure que les rounds passent, il devient plus paresseux et plus paresseux pour passer de l’autre côté.
la source
Biographe, Ruby
Ma tentative d’une entrée presque intelligente (une entrée réellement intelligente nécessiterait des tests sur le terrain). Écrit en Ruby, il y a donc des chances pour que ce soit trop lent, mais sur ma machine, cela prend 11 secondes pour calculer le dernier tour alors qu'il y a 40 joueurs aléatoires. J'espère donc que cela fonctionnera assez bien.
enregistrer sous
biographer.rb
, exécuter commeruby biographer.rb
L’idée est que, pour chaque joueur, il estime leurs chances de choisir "bon" en examinant à la fois leurs propres choix pour les dix derniers tours et les résultats globaux, et en trouvant des exemples dans le passé où des circonstances identiques (leurs votes + leur résultats) Il choisit la plus longue longueur de recherche, jusqu'à 10 tours, de sorte qu'il y ait un précédent, et l'utilise pour créer une fréquence (ajustée selon la loi de Laplace sur la succession, afin que nous ne soyons jamais sûrs à 100% de quiconque).
Il effectue ensuite des simulations et voit à quelle fréquence Good gagne. Si les simulations se déroulent généralement de la même manière, les prévisions seront probablement bonnes, de sorte que la minorité prédite sera choisie. S'il n'est pas confiant, il choisit la majorité prédite.
la source
Judas
Judas est une très bonne personne. Dommage qu'il trahisse les bons pour quelques sous.
la source
,
horshistory
, encore plus que Rusher va diviser le jeu en groupe.Le joueur fallacieux (Python)
Si une partie a remporté la majorité plusieurs fois d'affilée, le joueur se rend compte que l'autre partie risque davantage d'être la majorité au prochain tour (non?) Et cela influence son vote. Il vise la minorité, car s'il parvient à faire partie de la minorité, il y réussira probablement plusieurs fois (non?) Et accumulera beaucoup de points.
Usage
Pour le premier tour:
et ensuite:
la source
Automate cellulaire
Ceci utilise les règles conventionnelles du jeu de la vie de Conway pour choisir un camp. Tout d'abord, une grille 2D est créée à partir des votes précédents. Ensuite, le "monde" est avancé d'une étape et le nombre total de cellules vivantes restantes est calculé. Si ce nombre est supérieur à la moitié du nombre total de cellules, "bon" est choisi. Sinon, "le mal" est choisi.
S'il vous plaît pardonnez toutes les erreurs, cela a été écrasé pendant mon heure de déjeuner. ;)
la source
Le professeur de crête
J'espère que l'utilisation des bibliothèques est permise, ne vous sentez pas comme sans cela =)
L'idée de base est de former un classifieur de régression de crête pour chaque participant lors des derniers tours, en utilisant comme caractéristiques les 30 résultats avant chaque tour. À l’origine, le dernier tour de résultats était prévu pour tous les joueurs afin de prédire le résultat pour chaque joueur également, mais c’était assez serré pour le moment, lorsque le nombre de participants devient plus important (environ 50 environ).
Compiler
Enregistrez le code source dans un fichier appelé
ridge_professor.cc
, téléchargez la bibliothèque Eigen et décompressez le dossier Eigen situé dans le même dossier que le fichier source. Compiler avecg++ -I. -O3 -ffast-math -o ridge_professor ridge_professor.cc
.Courir
Appelez ridge_professor.exe et fournissez l'argument si nécessaire.
Question
Puisque je ne peux pas commenter pour le moment, je vais poser la question suivante: la limite de taille d'argument sur les fenêtres ne permet-elle pas d'appeler les fichiers binaires résultants avec l'historique complet à quelques centaines de tours? Je pensais que l'argument ne pouvait pas contenir plus de 9 000 caractères ...
la source
Crowley
Parce que les Winchesters sont beaucoup moins intéressants sans ce type. Il est évident qu'il se range du côté du mal… à moins que cela ne soit nécessaire pour prendre soin d'un plus grand mal.
Je regarde les deux derniers tours (0 virgule jusqu'à présent et 1 virgule jusqu'à présent) et si les deux laissaient le mal gagner, je votais bien. Sinon, je vote le mal.
la source