Merci pour toutes les inscriptions, la date limite est maintenant passée et les notes finales sont à la fin de la question.
Félicitations à PhiNotPi pour une victoire assez complète.
Il s'agit d'un défi du roi de la colline , dont le but est de créer un programme qui gagne plus souvent que n'importe lequel de ses adversaires dans une enchère d'enchères uniques la plus basse.
Contribution
En entrée, le programme recevra toutes les offres des tours précédents, un tour par ligne, toutes les offres séparées par des espaces comme suit:
10 4 12 11 12 4 7 3 3
1 2 9 15 1 15 15 9 3
3 21 6 4 3 8 6 13 1
Chaque colonne de l'entrée représente l'enchère d'un bot. La première colonne est les offres du programme récepteur, tandis que les autres sont dans un ordre généré aléatoirement. Merci à hammar et Peter Taylor pour leur contribution.
L'entrée est fournie comme le seul et unique argument de ligne de commande (multi-ligne) à votre programme:
./test1 '1 2
3 4
5 6
1 2'
Cela signifie que votre programme devra être exécutable à partir de la ligne de commande. Veuillez donner un exemple d'invocation dans le cadre de votre réponse.
Au premier tour, uniquement pour vous permettre de savoir combien de bots vous affrontez, l'entrée sera une ligne de 0
s - un pour chaque bot.
Sortie
Votre programme doit afficher son enchère sous forme d'entier compris entre 1 et 100 (inclus).
Programme des buteurs
Ceci est mon programme de notation - toute suggestion d'ajout, d'amélioration ou de correction de bogue serait la bienvenue.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUMROUNDS 10
#define NUMBOTS 4
#define MAXINPUTSIZE 10000
#define MAXFILENAMESIZE 100
int main()
{
int i,j,a,b,winner;
FILE *fp;
char bots[NUMBOTS][MAXFILENAMESIZE]={"onesconfident","random100","random20","random5"};
char openstring[MAXFILENAMESIZE+MAXINPUTSIZE+3];
char input[MAXINPUTSIZE];
char buff[5];
int shuffle[NUMBOTS],auction[100],lowestbid[NUMBOTS]={[0 ... NUMBOTS-1]=101};
static int guesses[NUMBOTS][NUMROUNDS];
static int scores[NUMBOTS],totalwinbids[NUMBOTS];
srand(time(NULL));
for(i=0;i<NUMROUNDS;i++)
{
/*blank the auction bids for the next round */
for(a=0;a<100;a++)
{
auction[a]=9999;
}
/*loop through the bots sending the input and storing their output */
for(j=0;j<NUMBOTS;j++)
{
/*Fisher-Yates shuffle */
for(b=0;b<NUMBOTS;b++)
{
shuffle[b]=(b+j)%NUMBOTS;/*put current bot at index 0 */
}
for(b=NUMBOTS-1;b>1;b--)
{
int z=rand()%(b-1)+1;/*make sure shuffle leaves index 0 alone */
int t=shuffle[b];
shuffle[b]=shuffle[z];
shuffle[z]=t;
}
/*generate the input for the bots */
strcpy(input,"'");
if(i==0)
{
for(b=0;b<NUMBOTS;b++)
{
if(b!=0)
sprintf(input,"%s 0",input);
else
sprintf(input,"%s0",input);
}
}
else
{
for(a=0;a<i;a++)
{
for(b=0;b<NUMBOTS;b++)
{
if(b!=0)
sprintf(input,"%s %d",input,guesses[shuffle[b]][a]);
else
sprintf(input,"%s%d",input,guesses[shuffle[b]][a]);
}
if(a!=i-1)
strcat(input,"\n");
}
}
strcat(input,"'");
sprintf(openstring,"%s %s",bots[j],input);
fp=popen(openstring,"r");
fgets(buff,3,fp);
fflush(NULL);
pclose(fp);
guesses[j][i]=atoi(buff);
/*add the bid to the auction, eliminating any duplicates */
if(auction[atoi(buff)-1]!=9999)
auction[atoi(buff)-1]=9998;
else
auction[atoi(buff)-1]=j;
}
winner=9999;
/*add one to the score of the winning bot */
for(a=0;a<100;a++)
{
if(auction[a]!=9998 && auction[a]!=9999)
{
winner=auction[a];
scores[winner]+=1;
totalwinbids[winner]+=guesses[winner][i];
if(guesses[winner][i]<lowestbid[winner])
lowestbid[winner]=guesses[winner][i];
break;
}
}
/*output this round's bids and the winning bot's name */
strcpy(input,"");
for(b=0;b<NUMBOTS;b++)
{
if(strcmp(input,"")!=0)
sprintf(input,"%s %d",input,guesses[b][i]);
else
sprintf(input,"%d",guesses[b][i]);
}
if(winner!=9999)
printf("%s %s\n",input,bots[winner]);
else
printf("%s No winner\n",input);
}
/*output final scores */
printf("\nResults:\n");
printf("Bot\tScore\tTotal\tLowest\n");
for(a=0;a<NUMBOTS;a++)
{
printf("%s\t%d\t%d\t%d\n",bots[a],scores[a],totalwinbids[a],lowestbid[a]);
}
return 0;
}
Joueurs de test
On est sûr de toujours enchérir 1.
#include <stdio.h>
int main()
{
printf("1");
return 0;
}
Random100 Enchères au hasard sur toute la plage
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%100+1);
return 0;
}
Random20 offres au hasard entre 1 et 20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%20+1);
return 0;
}
Random5 Enchères au hasard entre 1 et 5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%5+1);
return 0;
}
Exemple d'exécution:
1 38 5 2 onesconfident
1 66 13 5 onesconfident
1 94 1 3 random5
1 22 9 1 random20
1 50 17 4 onesconfident
1 78 5 2 onesconfident
1 6 13 5 onesconfident
1 34 1 3 random5
1 62 9 1 random20
1 90 17 4 onesconfident
Results:
Bot Score Total Lowest
onesconfident 6 6 1
random100 0 0 101
random20 2 18 9
random5 2 6 3
Ces joueurs sont uniquement à des fins de test. Ils NE seront PAS inclus dans le concours. Vous pouvez entrer autant de bots que vous le souhaitez, donc si quelqu'un entre dans un bot qui ne fait que deviner 1
, vous pouvez en entrer un autre qui fait de même pour le rendre inutile.
Gagnant
Le bot gagnant à chaque tour est celui qui donne l' enchère unique la plus basse . Donc, étant donné un tour dans lequel les offres suivantes sont faites: 1 1 3 5 2 3 6 3 2 8 7
le gagnant serait le bot qui a soumissionné 5
parce que les 1
s, 2
s et 3
s ne sont pas uniques.
Le vainqueur de la compétition sera le programme qui gagne le plus de fois après 100 manches. En cas d'égalité, le total des offres gagnantes sera utilisé comme bris d'égalité et, s'il s'agit également d'une égalité, l'offre gagnante la plus basse sera utilisée comme bris d'égalité supplémentaire. Ces facteurs de notation sont tous générés par le programme de notation.
Je vais exécuter le programme de notation sur tous les programmes de travail qui ont été entrés dans 2 semaines à partir d'aujourd'hui (le 18 février maintenant étendu à 23 heures (GMT) le 20 février ). Je voterai pour toutes les entrées de travail et accepterai le gagnant de ma course de notation.
Course de notation finale
1 9 3 2 1 6 4 3 6 8 7 10 26 6 10 5 26 2 5 8 8 5 7 6 42 1 ./phinotpi2
1 11 4 2 1 4 9 20 6 8 7 6 26 4 8 4 26 2 5 8 8 5 7 7 42 1 ./phinotpi2
1 7 9 2 1 4 3 20 6 8 7 6 7 4 8 9 26 2 5 8 8 5 4 9 42 3 node minitech1.js
1 13 20 2 1 3 3 20 6 8 7 7 9 6 8 20 26 2 5 8 8 5 9 9 42 3 ./dirichlet
1 12 13 2 1 1 3 20 6 8 7 7 9 6 9 13 26 2 5 8 8 5 20 9 42 3 ./dirichlet
1 2 4 2 1 1 3 20 6 8 7 7 9 6 9 12 26 2 5 8 8 5 13 9 42 3 python blazer1.py
1 11 4 2 1 4 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 12 9 42 3 ./celtschk
1 3 4 2 1 1 3 20 6 8 7 6 7 4 8 9 26 2 5 8 8 5 4 9 42 3 node minitech1.js
1 7 4 2 1 1 3 20 6 8 7 9 26 6 7 20 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 9 9 2 1 3 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 20 9 42 10 ./phinotpi2
1 13 4 2 1 3 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 12 20 2 1 1 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
1 10 3 2 1 2 4 20 6 8 7 6 9 3 9 3 26 2 5 8 8 5 7 9 42 10 ./phinotpi2
1 6 9 2 1 4 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 8 4 2 1 3 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./celtschk
1 2 13 2 1 3 3 20 6 8 7 9 20 6 8 9 26 2 5 8 8 5 7 9 42 10 ruby1.9 strategist.rb
1 2 4 2 1 3 3 20 6 8 7 7 10 6 9 10 26 2 5 8 8 5 9 9 42 10 python blazer1.py
1 3 13 2 1 4 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 10 9 42 10 ./celtschk
1 4 4 2 1 3 3 20 6 8 7 6 7 4 8 9 26 2 5 8 8 5 4 9 42 10 ruby1.9 strategist.rb
1 4 9 2 1 4 3 20 6 8 7 7 9 6 8 10 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 11 7 2 1 1 4 20 6 8 7 6 7 3 8 3 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 6 4 2 1 3 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 13 7 2 1 1 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
1 7 4 2 1 4 4 20 6 8 7 6 20 3 8 3 26 2 5 8 8 5 7 9 42 10 ./celtschk
1 13 3 2 1 1 4 20 6 8 7 6 7 3 8 9 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 3 4 2 1 3 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 9 9 42 10 ruby1.9 strategist.rb
1 5 4 2 1 2 3 20 6 8 7 6 7 4 8 10 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
1 6 3 2 1 3 4 20 6 8 7 6 7 3 8 3 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 10 20 2 1 1 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 10 3 2 1 4 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./celtschk
1 12 4 2 1 1 3 20 6 8 7 9 20 6 8 9 26 2 5 8 8 5 7 9 42 10 ./phinotpi2
1 5 3 2 1 1 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 13 3 2 1 4 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 6 9 2 1 4 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
1 5 4 2 1 2 4 20 6 8 7 6 20 3 8 3 26 2 5 8 8 5 7 9 42 10 ./celtschk
1 12 3 2 1 3 4 20 6 8 7 6 7 3 8 9 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 10 7 2 1 2 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 9 10 2 1 4 9 20 6 8 7 4 6 3 8 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 9 20 2 1 4 4 20 6 8 7 6 20 3 8 7 26 2 5 8 8 5 3 9 42 10 ruby1.9 strategist.rb
1 6 3 2 1 3 3 20 6 8 7 9 10 6 9 10 26 2 5 8 8 5 7 9 42 10 node minitech1.js
1 13 3 2 1 3 3 20 6 8 7 7 10 6 8 20 26 2 5 8 8 5 10 9 42 11 ./celtschk
1 3 3 2 1 1 3 20 6 8 7 7 26 6 9 9 26 2 5 8 8 5 20 9 42 11 ruby1.9 strategist.rb
1 5 20 2 1 2 3 20 6 8 7 7 11 6 9 11 26 2 5 8 8 5 9 9 42 11 ./phinotpi2
1 7 3 2 1 4 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 11 9 42 11 node minitech1.js
1 7 3 2 1 1 4 20 6 8 7 6 7 3 8 20 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 8 4 2 1 4 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 20 9 42 10 ./phinotpi2
1 2 3 2 1 3 9 20 6 8 7 4 6 3 8 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 4 13 2 1 3 4 20 6 8 7 6 20 3 7 7 26 2 5 8 8 5 3 9 42 10 ./celtschk
1 8 3 2 1 3 3 20 6 8 7 9 20 6 8 9 26 2 5 8 8 5 7 9 42 10 ruby1.9 strategist.rb
1 9 10 2 1 2 3 20 6 8 7 7 10 6 9 10 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 10 20 2 1 1 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 9 4 2 1 1 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 11 20 2 1 4 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
1 4 9 2 1 3 4 20 6 8 7 6 9 3 9 3 26 2 5 8 8 5 7 9 42 10 ruby1.9 strategist.rb
1 5 3 2 1 4 4 20 6 8 7 6 7 3 8 10 26 2 5 8 8 5 3 9 42 10 ./celtschk
1 7 4 2 1 3 3 20 6 8 7 7 9 6 8 9 26 2 5 8 8 5 10 9 42 10 python blazer1.py
1 4 9 2 1 1 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 8 4 2 1 3 9 20 6 8 7 4 6 3 8 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 10 9 2 1 3 4 20 6 8 7 6 20 3 8 7 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 4 20 2 1 1 3 20 6 8 7 6 20 4 8 4 26 2 5 8 8 5 7 9 42 10 ./phinotpi2
1 5 3 2 1 2 9 20 6 8 7 4 6 3 9 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 2 4 2 1 1 4 20 6 8 7 6 20 3 8 7 26 2 5 8 8 5 3 9 42 10 ./celtschk
1 10 12 2 1 1 3 20 6 8 7 9 20 6 8 9 26 2 5 8 8 5 7 9 42 10 ./phinotpi2
1 9 4 2 1 4 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 9 9 42 10 ruby1.9 strategist.rb
1 11 3 2 1 3 4 20 6 8 7 6 7 3 8 10 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 8 4 2 1 1 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 13 9 2 1 4 9 20 6 8 7 4 6 3 8 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 2 9 2 1 3 4 20 6 8 7 6 20 3 8 7 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 8 3 2 1 2 3 20 6 8 7 6 20 4 8 4 26 2 5 8 8 5 7 9 42 10 ./celtschk
1 3 3 2 1 4 3 20 6 8 7 6 7 4 8 9 26 2 5 8 8 5 4 9 42 10 ruby1.9 strategist.rb
1 10 4 2 1 1 3 20 6 8 7 7 9 6 8 10 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 3 9 2 1 4 4 20 6 8 7 6 7 3 8 3 26 2 5 8 8 5 10 9 42 10 node minitech1.js
1 7 11 2 1 4 4 20 6 8 7 6 7 3 8 20 26 2 5 8 8 5 3 9 42 10 ./celtschk
1 8 3 2 1 2 3 20 6 8 7 7 9 6 8 9 26 2 5 8 8 5 20 9 42 10 ruby1.9 strategist.rb
1 3 10 2 1 3 3 20 6 8 7 7 10 6 9 10 26 2 5 8 8 5 9 9 42 10 node minitech1.js
1 8 4 2 1 1 3 20 6 8 7 7 10 6 8 20 26 2 5 8 8 5 10 9 42 11 ./phinotpi2
1 2 4 2 1 2 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 20 9 42 11 ruby1.9 strategist.rb
1 4 9 2 1 4 4 20 6 8 7 6 7 3 8 11 26 2 5 8 8 5 3 9 42 11 node minitech1.js
1 4 9 2 1 1 3 20 6 8 7 7 11 6 8 20 26 2 5 8 8 5 11 9 42 10 ./phinotpi2
1 2 7 2 1 1 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 20 9 42 10 ./phinotpi2
1 9 3 2 1 1 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 3 9 2 1 2 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ruby1.9 strategist.rb
1 5 7 2 1 3 3 20 6 8 7 10 20 6 8 10 26 2 5 8 8 5 7 9 42 10 ./celtschk
1 8 10 2 1 4 3 20 6 8 7 7 10 6 9 9 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 5 4 2 1 4 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 9 9 42 10 ruby1.9 strategist.rb
1 5 20 2 1 3 4 20 6 8 7 6 7 3 8 10 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 11 20 2 1 2 3 20 6 8 7 6 7 4 8 4 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 12 10 2 1 1 9 20 6 8 7 4 6 3 9 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 10 3 2 1 1 4 20 6 8 7 6 20 3 8 7 26 2 5 8 8 5 3 9 42 10 ./phinotpi2
1 9 4 2 1 4 3 20 6 8 7 6 20 4 8 4 26 2 5 8 8 5 7 9 42 10 ./phinotpi2
1 5 3 2 1 1 9 20 6 8 7 4 6 3 8 3 26 2 5 8 8 5 4 9 42 10 scala Schwarzenbeck
1 7 4 2 1 1 4 20 6 8 7 6 20 3 7 7 26 2 5 8 8 5 3 9 42 10 ./celtschk
1 11 7 2 1 3 3 20 6 8 7 9 20 6 8 9 26 2 5 8 8 5 7 9 42 10 ruby1.9 strategist.rb
1 13 10 2 1 1 3 20 6 8 7 7 10 6 9 10 26 2 5 8 8 5 9 9 42 10 ./phinotpi2
1 9 9 2 1 1 4 20 6 8 7 6 7 3 9 3 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 7 9 2 1 3 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 ruby1.9 strategist.rb
1 13 7 2 1 4 3 20 6 8 7 6 7 4 8 10 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
1 8 7 2 1 1 4 20 6 8 7 6 7 3 8 3 26 2 5 8 8 5 10 9 42 10 ./phinotpi2
1 12 3 2 1 1 9 20 6 8 7 4 6 3 8 4 26 2 5 8 8 5 3 9 42 10 scala Schwarzenbeck
1 13 7 2 1 2 3 20 6 8 7 6 20 4 8 7 26 2 5 8 8 5 4 9 42 10 ./phinotpi2
Results:
Bot Score Total Lowest
perl phinotpi1.pl 0 0 101
./dirichlet 2 25 12
python blazer1.py 3 12 4
perl chef.pl ilmari2.chef 0 0 101
./brainfuck ilmari1.bf 0 0 101
./christophe1 0 0 101
./phinotpi2 44 156 3
node minitech1.js 7 140 20
scala Mueller 0 0 101
scala Beckenbauer 0 0 101
scala Schwarzenbeck 15 105 7
./alice 0 0 101
./bob 0 0 101
./eve 0 0 101
python joe.py 0 0 101
python copycat.py 0 0 101
python totalbots.py 0 0 101
perl healthinspector.pl 0 0 101
./mellamokb1 0 0 101
./mellamokb2 0 0 101
php eightscancel.php 0 0 101
php fivescancel.php 0 0 101
python copycat2.py 0 0 101
./celtschk 14 126 9
./deepthought 0 0 101
ruby1.9 strategist.rb 15 152 10
la source
Réponses:
Perl
J'ai essayé un peu plus fort cette fois. C'est une stratégie complexe très
simple, mais j'ai mis en place le cadre de l'expansion.Édition: refaire complètement. Cette chose est là pour la victoire.
Ce programme prend l'entrée une ligne à la fois, suivi de deux retours à la ligne:
la source
Chef
Puisque toujours miser 1 est désormais une stratégie perdante , la chose la plus évidente à faire est de toujours miser 2 à la place. Alors laissez-moi faire ça. Pour rendre cette entrée autrement ennuyeuse un peu plus intéressante, j'ai décidé de l'écrire dans Chef :
En prime, le programme fonctionne en fait plus ou moins comme une vraie recette - même banale -, même si elle se lit comme si l'écrivain était un peu, euh, cuit au four. La grammaire du chef semble rendre difficile l'écriture de tout ce qui implique quelque chose de plus compliqué que de mélanger des choses dans un bol et de les cuire et de les faire fonctionner à la fois comme programme et comme recette, surtout si l'un des verbes que l'on veut utiliser sont même légèrement irréguliers (comme "frire" → "frit").
Edit: Modification de la recette des œufs frits aux œufs rincés - merci à Blazer pour la suggestion! Le temps et la température de cuisson ne doivent être considérés qu'à titre indicatif; Je n'ai pas encore essayé la recette moi-même, donc je ne peux pas garantir leur précision.
la source
shirred eggs
, ce qui se fait en fait dans un plat de cuisson et cela ferait de la recette une recette de cuisine valide et grammaticalement correcte.shirr the eggs. shirr the eggs until shirred.
horray pour avoir une éducation culinaire à mon actif! :)Python (2.6)
Extrêmement simple, mais je suis toujours curieux de savoir comment cela fonctionnera par rapport aux autres approches.
Il suffit de diriger les enchères via stdin, par exemple
python testbid.py < bids.txt
.EDIT : changé pour le «premier tour tous les zéros»
EDIT : changé un peu les 'nombres magiques' (une deuxième fois)
la source
m = random.choice(1,2,2,3,3,3)
êtrem = random.choice([1,2,2,3,3,3])
?Python (Blazer)
Ce bot analyse les tours précédents et enregistre les numéros gagnants. Les numéros gagnants qui apparaissent plus souvent auront donc plus de chances d'être sélectionnés. Il choisira ensuite au hasard des numéros parmi les numéros gagnants (autres que 1 ou 2). il choisira
23 à la place s'il s'agit du premier tour.L'entrée est lue une ligne à la fois. entrez simplement une ligne vide pour ne plus accepter de saisieUne astuce consiste à simplement coller (il accepte automatiquement chaque ligne avec \ n dans la pâte) et appuyez deux fois sur EntréeVous pouvez maintenant simplement exécuter le script avec un nom de fichier dans la ligne de commande:
le fichier devrait ressembler à ceci:
-
edit: ajoutéor sum(rounds) == 0
pour compenser la récente modification du premier tour tous les zérosedit: les problèmes dans les commentaires ont été corrigés, ce qui a également permis de recevoir des entrées à partir d'un nom de fichier, et ne choisit plus '2' depuis que la concurrence l'a également éliminé. fonctionne avec tous les 0 comme entrée de départ ou aucune donnée dans le fichier
edit2: oublié un min ()
edit3: entrée modifiée pour répondre aux besoins d'entrée de la question
la source
echo "$@" | python bidding.py
devrait faire le travail.TypeError: unsupported operand type(s) for +: 'int' and 'list'
pour la ligne 23. J'utilise Python 2.6.1, est-ce le problème? ai-je besoin d'une version plus récente? J'obtiens le même problème sans utiliser le script bash.Schwarzenbeck (Scala)
Schwarzenbeck n'est pas censé marquer les buts. Il est le nettoyage de Beckenbauer, qui suivra bientôt. :)
Pour l'utiliser, vous avez besoin d'un compilateur et compilez-le
Ensuite, vous pouvez l'exécuter:
Edit: ajustements supplémentaires.
la source
Stratège (Ruby)
Met en œuvre des centaines de stratégies simples: pour chaque tour, choisit celle qui aurait gagné le plus de tours précédents:
Je ne suis pas sûr d'avoir le bon format d'entrée - je ne sais pas comment générer des arguments de ligne de commande sur plusieurs lignes pour le tester sur Windows. (Cette méthode semble fonctionner sur IDEone.)
la source
strategist.rb:48:in 'each': No such file or directory - 42 2 6 10 8 6 5 7 6 1 5 8 3 6 3 4 26 2 10 1 26 8 42 5 3 7 (Errno::ENOENT)
. J'arrêterai d'envisager de nouvelles entrées après 23 heures, mais je retarderai légèrement le score pour vous donner le temps d'examiner le bogue si vous le souhaitez.ARGF
au lieu d'ARGV. Après avoir fait ce changement, le programme devine à1
chaque fois. Avez-vous des idées sur ce que je peux faire pour y remédier?p ARGV.map{|l|l};exit
(Aucune des réponses SO à la question que vous référencez ou des réponses similaires ne semble me donner l'entrée attendue)["1 2\n3 4\n5 6\n1 2"]
pour l'entrée de test dans la question.Perl
J'ai pensé que je pourrais aussi bien entrer dans l'inévitable. Entrées plus sérieuses à venir bientôt. En prime, cette participation ne perdra jamais en compétition individuelle.
la source
JavaScript (node.js)
Compte ce qui a été le plus populaire au dernier tour et en offre un de moins que cela, enchaînant à 20 et enchérissant 3 au premier tour.
Comment invoquer:
la source
for
boucle? Doitif(i in numbers)
êtreif(matches[i] in numbers)
pensez-vous?node.js:201 throw e; // process.nextTick error, or 'error' event on first tick TypeError: Cannot read property 'length' of null at Object.<anonymous> (minitech1.js:6:23)
Python (CopyCat)
Encore un autre, cette fois, il copie la réponse exacte du dernier gagnant, s'il y en avait une. Il est conçu à la fois pour essayer de gagner et de bloquer d'autres soumissionnaires. offre
5
si premier tour, offre un nombre aléatoire du tour précédent s'il n'y avait pas de vainqueurla source
Python (Joe)
Ce n'est en aucun cas conçu pour gagner, mais je le lance quand même pour ajouter de la couleur à la foule :) Il offre la moyenne du dernier tour (Average Joe). Invoqué la même chose que ma réponse d'origine (que je vais maintenant nommer car il semble que c'est ce que font tous les enfants sympas, et cela aide à distinguer les deux). si elle commence, elle enchère
10
.modifier: modification de la méthode de saisie pour l'adapter à la méthode de saisie de la question
la source
Python (TotalBots)
Je pense que celui-ci sera mon dernier, mais nous verrons. Cela prend l'avantage de savoir combien il y a de robots en affichant simplement le nombre de robots concurrents, donc s'il y a 17 robots (nombre actuel de robots, plus celui-ci), il affichera
17
la source
Perl (inspecteur de la santé)
Je parie que vous pouvez deviner ce que ça fait.
la source
C ++ (Guess instruit)
Je pensais déjà que j'aurais manqué le délai, mais grâce à l'extension je peux encore ajouter mon entrée. Ce programme se compile avec g ++. Le programme essaie de deviner les statistiques des autres entrées et de choisir la plus petite qui ne sera probablement pas choisie par une autre.
la source
Perl (Bob)
Voir "Bob" pour savoir comment l'invoquer.
la source
Perl (Alice)
Prend des entrées similaires à mes autres robots.
la source
Perl (Eve)
J'ai refait complètement cette entrée pour ouvrir la voie à mes autres robots.
Prend un format d'entrée: le même que "Bob" et "Alice".
la source
Brainfuck
Pour citer le défi:
Eh bien, puisque PhiNotPi en a entré un , laissez-moi en entrer un autre. Juste pour être différent, je le ferai dans Brainfuck:
Bien sûr, maintenant que le pari 1 n'est plus une stratégie réalisable, la chose évidente à faire maintenant est de parier 2 à la place ...
Modifier: diviser la réponse en deux par commentaires, réécrire les deux programmes dans des langues plus intéressantes.
la source
Mueller (Scala)
Si vous connaissez Schwarzenbeck et Beckenbauer, vous vous attendiez sûrement à Mueller. Il est la. Il bénéficiera beaucoup de Beckenbauer et Schwarzenbeck et devrait gagner.
Détails sur l'exécution et la compilation: voir Schwarzenbeck
Plus près de l'objectif, maintenant.
la source
Beckenbauer (Scala)
Avec l'aide de Schwarzenbeck, Beckenbauer est censé marquer des buts. Sans Schwarzenbeck, il n'est rien.
Détails sur l'exécution et la compilation: voir [Schwarzenbeck] [1]
Edit: jouer plus profondément dans la salle maintenant aussi.
la source
Script par lots
Ma soumission, donne 5 comme réponse à chaque fois ;-)
la source
Eight.bat
Une autre réponse simple, donne 8 à chaque fois.
la source
FivesCancel (PHP)
Annule la solution "toujours 5" de mellamokb.
la source
EightsCancel (PHP)
Annule la solution "toujours 8" de mellamokb. Désolé, mellamokb!
la source
Python 2.7 - Copycat2
Copie le vainqueur de l' avant- dernier tour. Oh non! sinon sorties 7.
la source
Script shell (Deep Thought)
OK, pour avoir une seconde chance, voici une autre entrée, cette fois un script shell (devrait fonctionner avec n'importe quel shell). Cela donne toujours la réponse à la question de la vie, de l'univers et de tout.
En fait, cet algorithme n'est pas entièrement correct car j'ai omis le retard de 7,5 millions d'années. :-)
la source
dirichlet.c
Je pense que cela passe par des bits aléatoires trop rapides à utiliser
/dev/random
, mais je préférerais beaucoup. Si quelqu'un veut le tester sur Windows, vous devrez le porter vous-même, car je n'ai pas accès à une boîte Windows avec un compilateur C.Raisonnement
Je ne voulais pas expliquer la logique derrière cela avant la fin du tournoi, mais maintenant que le vainqueur a été annoncé, je pense qu'il est temps.
Par le principe du pigeon-hole (alias le principe de Dirichlet, d'où le nom du bot), s'il y a N bots concurrents alors il y a un nombre w dans [1..1 + N / 2] qui a gagné ou aurait gagné si choisi. Je conclus donc que la stratégie optimale ne sélectionnera pas des nombres supérieurs à 1+ N / 2. Mais si N est pair, sélectionner 1+ N / 2 crée un emplacement gagnant plus petit. Par conséquent, les emplacements qui méritent d'être sélectionnés sont [1 .. ( N +1) / 2].
Cela laisse la question de savoir comment sélectionner un emplacement. Pour un petit nombre de bots, j'ai vérifié qu'il y a un équilibre de Nash lorsque chaque bot sélectionne uniformément parmi les candidats, et je soupçonne fortement que cela continuera à être vrai.
L'écart mineur entre la stratégie de ce bot et la stratégie théorique est simplement le méta-jeu.
la source