Vielen Dank für alle Einsendungen, die Deadline ist nun abgelaufen und die Endergebnisse sind am Ende der Frage.
Glückwunsch an PhiNotPi zu einem recht umfassenden Sieg.
Dies ist eine echte Herausforderung, deren Ziel es ist, ein Programm zu erstellen, das in einer Auktion mit dem niedrigsten Einzelgebot häufiger gewinnt als jeder seiner Gegner.
Eingang
Als Eingabe erhält das Programm alle Gebote der vorherigen Runden, eine Runde pro Zeile, wobei alle Gebote wie folgt durch Leerzeichen getrennt sind:
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
Jede Spalte der Eingabe repräsentiert das Bieten eines Bots. Die erste Spalte enthält die Gebote des empfangenden Programms, während der Rest in zufälliger Reihenfolge generiert wird. Vielen Dank an Hammar und Peter Taylor für ihren Beitrag.
Die Eingabe wird als einziges (mehrzeiliges) Befehlszeilenargument für Ihr Programm bereitgestellt:
./test1 '1 2
3 4
5 6
1 2'
Dies bedeutet, dass Ihr Programm über die Befehlszeile ausgeführt werden muss. Bitte geben Sie ein Beispiel für den Aufruf als Teil Ihrer Antwort.
In der ersten Runde wird 0
für jeden Bot eine S-Eins- Zeile eingegeben, um Sie über die Anzahl der Bots zu informieren, gegen die Sie antreten .
Ausgabe
Ihr Programm sollte sein Gebot als Ganzzahl im Bereich von 1 bis 100 (einschließlich) ausgeben.
Torschütze Programm
Dies ist mein Bewertungsprogramm - Vorschläge für Ergänzungen, Verbesserungen oder Fehlerkorrekturen sind willkommen.
#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;
}
Spieler testen
Man ist zuversichtlich, immer bietet 1.
#include <stdio.h>
int main()
{
printf("1");
return 0;
}
Random100 Bietet zufällig über den gesamten Bereich
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%100+1);
return 0;
}
Random20 Bietet zufällig zwischen 1 und 20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%20+1);
return 0;
}
Random5 Bietet zufällig zwischen 1 und 5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%5+1);
return 0;
}
Beispiel Durchlauf:
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
Diese Player dienen nur zu Testzwecken. Sie werden NICHT in den Wettbewerb aufgenommen. Sie können so viele Bots eingeben, wie Sie möchten. Wenn also jemand einen Bot eingibt, der nur raten kann 1
, können Sie einen anderen eingeben, der dasselbe tut, um ihn unbrauchbar zu machen.
Gewinner
Der Gewinner in jeder Runde ist derjenige, der das niedrigste Einzelgebot abgibt. Bei einer Runde, in der die folgenden Gebote abgegeben werden, ist 1 1 3 5 2 3 6 3 2 8 7
der Gewinner derjenige, der geboten hat, 5
da 1
s, 2
s und 3
s nicht eindeutig sind.
Gewinner des Wettbewerbs ist das Programm, das nach 100 Runden am häufigsten gewinnt. Im Falle eines Unentschieden wird die Summe der gewonnenen Gebote als Unentschieden gewertet, und im Falle eines Unentschieden wird das niedrigste gewonnene Gebot als weiterer Unentschieden gewertet. Diese Bewertungsfaktoren werden alle vom Bewertungsprogramm ausgegeben.
Ich werde das Scoring-Programm für alle Arbeitsprogramme durchführen, die in zwei Wochen ab heute ( 18. Februar, jetzt verlängert um 23 Uhr (GMT) am 20. Februar ) eingegangen sind . Ich werde alle funktionierenden Einträge verbessern und den Gewinner meines Wertungslaufs akzeptieren.
Letzter Wertungslauf
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
quelle
Antworten:
Perl
Ich habe es diesmal etwas härter versucht. Es ist eine sehr
einfache undkomplexe Strategie, aber ich habe den Rahmen für die Erweiterung festgelegt.Bearbeiten: Vollständiges Wiederherstellen. Diese Sache ist drin für den Sieg.
Dieses Programm nimmt die Eingabe zeilenweise vor, gefolgt von zwei neuen Zeilen:
quelle
Koch
Da immer 1 zu setzen jetzt eine verlierende Strategie ist , ist es naheliegend, immer 2 zu setzen. Also lass mich das machen. Um diesen ansonsten langweiligen Eintrag ein wenig interessanter zu machen, habe ich beschlossen, ihn in Chef zu schreiben :
Als Bonus funktioniert das Programm mehr oder weniger wie ein echtes - wenn auch triviales - Rezept, auch wenn es so liest, als ob der Schreiber ein bisschen, ähm, gebacken wäre. Die Chef-Grammatik scheint es ziemlich schwierig zu machen, etwas zu schreiben, das komplizierter ist als das Mischen von Dingen in einer Schüssel und das Backen, und dennoch funktioniert es sowohl als Programm als auch als Rezept, besonders wenn eines der Verben verwendet werden soll sind sogar leicht unregelmäßig (wie "braten" → "gebraten").
Edit: Das Rezept wurde von gebratenen zu gerafften Eiern geändert - danke an Blazer für den Vorschlag! Die Garzeit und die Temperatur sollten nur als Richtwerte angesehen werden. Ich habe das Rezept noch nicht selbst ausprobiert und kann daher nicht für deren Richtigkeit bürgen.
quelle
shirred eggs
, was tatsächlich in einer Auflaufform gemacht wird, und das würde das Rezept zu einem tatsächlich gültigen und grammatikalisch korrekten Kochrezept machen.shirr the eggs. shirr the eggs until shirred.
Schrecken, dass ich kulinarische Ausbildung habe! :)Python (2.6)
Extrem einfach, aber ich bin trotzdem gespannt, wie es sich im Vergleich zu den anderen Ansätzen verhält.
Einfach die gebote über stdin einpfeifen, zb
python testbid.py < bids.txt
.BEARBEITEN : geändert für die 'erste Runde alle Nullen'
BEARBEITEN : änderte die "magischen Zahlen" ein wenig (ein zweites Mal)
quelle
m = random.choice(1,2,2,3,3,3)
seinm = random.choice([1,2,2,3,3,3])
?Python (Blazer)
Dieser Bot analysiert die vorherigen Runden und zeichnet die Gewinnzahlen auf. Gewinnzahlen, die häufiger erscheinen, haben daher eine bessere Chance, ausgewählt zu werden. Es werden dann zufällig Zahlen aus den Gewinnzahlen ausgewählt (außer 1 oder 2). es wird stattdessen
23 wählen, wenn es die erste Runde ist.Die Eingabe wird zeilenweise gelesen. Geben Sie einfach eine leere Zeile ein, um keine Eingaben mehr zu akzeptierenEin Trick ist, einfach einzufügen (es akzeptiert automatisch jede Zeile mit \ n innerhalb des Einfügens) und zweimal die Eingabetaste zu drückenSie können das Skript jetzt einfach mit einem Dateinamen in der Befehlszeile ausführen:
Die Datei sollte folgendermaßen aussehen:
-
edit: hinzugefügtor sum(rounds) == 0
, um die letzte Änderung der Nullen in der ersten Runde zu kompensierenedit: Probleme mit Kommentaren behoben, die Eingabe von einem Dateinamen möglich machten und nie mehr '2' wählten, da die Konkurrenz dies ebenfalls ausgemerzt hat. Arbeitet entweder mit allen Nullen als Ausgangseingabe oder ohne Daten in der Datei
edit2: habe eine Minute vergessen ()
edit3: Eingabe geändert, um den Eingabebedürfnissen der Frage zu entsprechen
quelle
echo "$@" | python bidding.py
sollte den Job machen.TypeError: unsupported operand type(s) for +: 'int' and 'list'
Zeile 23 wird ein Fehler angezeigt. Ich verwende Python 2.6.1. Ist das das Problem? Benötige ich eine neuere Version? Ich bekomme das gleiche Problem ohne das Bash-Skript.Schwarzenbeck (Scala)
Schwarzenbeck soll die Tore nicht schießen. Er ist die Bereinigung für Beckenbauer, die bald folgt. :)
Um es zu benutzen, brauchen Sie einen Compiler und kompilieren es
Dann können Sie es ausführen:
Bearbeiten: Weitere Anpassungen.
quelle
Stratege (Ruby)
Implementiert Hunderte einfacher Strategien: Wählt für jede Runde diejenige aus, die die meisten vorherigen Runden gewonnen hätte:
Ich bin nicht sicher, ob ich das richtige Eingabeformat habe - ich bin nicht sicher, wie ich mehrzeilige Befehlszeilenargumente zum Testen unter Windows generieren soll. (Diese Methode scheint auf IDEone zu funktionieren.)
quelle
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)
. Ich werde nach 23:00 Uhr aufhören, neue Einträge zu berücksichtigen, aber ich werde den Wertungslauf etwas verzögern, um Ihnen Zeit zu geben, den Fehler zu untersuchen, wenn Sie möchten.ARGF
anstelle von ARGV hatten. Nachdem Sie diese Änderung vorgenommen haben, wird das Programm1
jedes Mal erraten . Irgendwelche Ideen, was ich tun kann, um es zu beheben?p ARGV.map{|l|l};exit
(Keine der SO-Antworten auf die Frage, auf die Sie verweisen, oder ähnliche scheinen mir die erwartete Eingabe zu geben)["1 2\n3 4\n5 6\n1 2"]
für die Testeingabe in der Frage ausgedruckt.Perl
Ich dachte mir, dass ich genauso gut das Unvermeidliche betreten könnte. Weitere ernsthafte Einträge folgen in Kürze. Als Bonus verliert dieser Beitrag niemals im Einzelwettbewerb.
quelle
JavaScript (node.js)
Zählt, was in der letzten Runde am beliebtesten war, und bietet weniger als eins. In der ersten Runde wird auf 20 gewettet und 3 geboten.
So rufen Sie auf:
quelle
for
Schleife ist? Sollteif(i in numbers)
seinif(matches[i] in numbers)
, denkst du?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)
Ein weiteres Mal kopiert es die genaue Antwort des letzten Gewinners, falls es eine gab. Es soll sowohl versuchen, andere Bieter zu gewinnen als auch zu blockieren. bietet
5
wenn erste Runde, bietet eine Zufallszahl von der vorherigen Runde, wenn es irgendwie keinen Sieger gabquelle
Python (Joe)
Dies ist keineswegs zum Gewinnen gedacht, aber ich werfe es trotzdem raus, um der Menge etwas Farbe zu verleihen :) Es bietet den Durchschnitt der letzten Runde (Average Joe). Wird genauso aufgerufen wie meine ursprüngliche Antwort (die ich jetzt benenne, weil es so aussieht, als ob all die coolen Kinder das tun, und es hilft, die beiden zu unterscheiden). Wenn Sie eine Runde anfangen, bieten Sie
10
.Bearbeiten: Eingabemethode geändert, um der Eingabemethode der Frage zu entsprechen
quelle
Python (TotalBots)
Ich denke, das wird mein letzter sein, aber wir werden sehen. Es ist von Vorteil zu wissen, wie viele Bots es gibt, indem einfach die Anzahl der konkurrierenden Bots ausgegeben wird. Wenn es also 17 Bots gibt (aktuelle Anzahl der Bots plus dieser), wird ausgegeben
17
quelle
Perl (Gesundheitsinspektor)
Ich wette, Sie können erraten, was es tut.
quelle
C ++ (fundierte Vermutung)
Ich dachte schon, ich hätte die Deadline verpasst, aber dank der Erweiterung kann ich meinen Eintrag immer noch hinzufügen. Dieses Programm kompiliert mit g ++. Das Programm versucht, die Statistik der anderen Einträge zu erraten und die kleinste auszuwählen, die wahrscheinlich von keiner anderen ausgewählt wird.
quelle
Perl (Bob)
Informationen zum Aufrufen finden Sie unter "Bob".
quelle
Perl (Alice)
Übernimmt Eingaben ähnlich wie bei meinen anderen Bots.
quelle
Perl (Eva)
Ich habe diesen Eintrag komplett überarbeitet, um den Weg für meine anderen Bots zu ebnen.
Nimmt ein Eingabeformat an: das gleiche wie "Bob" und "Alice".
quelle
Brainfuck
Um aus der Herausforderung zu zitieren:
Nun, da PhiNotPi eines eingegeben hat , lass mich ein anderes eingeben. Nur um anders zu sein, mache ich es in Brainfuck:
Natürlich ist es jetzt, da Wetten 1 nicht länger eine praktikable Strategie ist, naheliegend, stattdessen 2 zu setzen ...
Bearbeiten: Antwort in zwei Teile pro Kommentar teilen, beide Programme in interessanteren Sprachen umschreiben.
quelle
Mueller (Scala)
Wenn Sie Schwarzenbeck und Beckenbauer kennen, haben Sie sicherlich Müller erwartet. Hier ist er. Er wird viel von Beckenbauer und Schwarzenbeck profitieren und soll gewinnen.
Details zum Laufen und Kompilieren: Siehe Schwarzenbeck
Jetzt näher am Ziel.
quelle
Beckenbauer (Scala)
Mit Hilfe von Schwarzenbeck soll Beckenbauer einige Tore schießen. Ohne Schwarzenbeck ist er nichts.
Details zum Laufen und Kompilieren: Siehe [Schwarzenbeck] [1]
Edit: Spiele jetzt auch tiefer im Raum.
quelle
Batch-Scripting
Mein Beitrag gibt jedes Mal 5 als Antwort ;-)
quelle
Eight.bat
Eine andere einfache Antwort, gibt jedes Mal 8.
quelle
FivesCancel (PHP)
Bricht die "always 5" -Lösung von mellamokb ab.
quelle
EightsCancel (PHP)
Bricht die "always 8" -Lösung von mellamokb ab. Entschuldigung, mellamokb!
quelle
Python 2.7 - Copycat2
Kopiert die zweite letzte Runde des Gewinner. Ach nein! sonst Ausgänge 7.
quelle
Shell-Skript (Deep Thought)
OK, damit ich eine kleine zweite Chance bekomme, hier ist ein weiterer Eintrag, diesmal ein Shell-Skript (sollte mit jeder Shell funktionieren). Dies gibt immer die Antwort auf die Frage nach dem Leben, dem Universum und allem.
Eigentlich ist dieser Algorithmus nicht ganz korrekt, da ich die Verzögerung von 7,5 Millionen Jahren weggelassen habe. :-)
quelle
dirichlet.c
Ich denke, das geht durch zufällige Bits zu schnell zu verwenden
/dev/random
, wie viel ich bevorzugen würde. Wenn jemand es unter Windows testen möchte, muss er es selbst portieren, da ich keinen Zugriff auf eine Windows-Box mit einem C-Compiler habe.Begründung
Ich wollte die Logik dahinter nicht erklären, bevor das Turnier vorbei war, aber jetzt, da der Gewinner bekannt gegeben wurde, denke ich, ist es Zeit.
Nach dem Pigeon-Hole-Prinzip (alias Dirichlet-Prinzip, daher der Name des Bots) gibt es bei N konkurrierenden Bots eine Zahl w in [1..1 + N / 2], die entweder gewonnen hat oder gewonnen hätte, wenn ausgewählt. Ich komme daher zu dem Schluss, dass die optimale Strategie keine Zahlen größer als 1+ N / 2 auswählt . Aber wenn N gerade ist, erzeugt die Auswahl von 1+ N / 2 einen kleineren Gewinnschlitz. Daher sind die Schlitze, die es wert sind, ausgewählt zu werden, [1 .. ( N +1) / 2].
Es bleibt die Frage, wie ein Steckplatz ausgewählt werden soll. Bei einer kleinen Anzahl von Bots habe ich festgestellt, dass es ein Nash-Gleichgewicht gibt, wenn jeder Bot unter den Kandidaten einheitlich auswählt, und ich bin fest davon überzeugt, dass dies auch weiterhin der Fall sein wird.
Die geringfügige Abweichung der Strategie dieses Bots von der theoretischen ist einfach Metagaming.
quelle