Спасибо за все заявки, срок истек и окончательные результаты в конце вопроса.
Поздравляем PhiNotPi с довольно полной победой.
Это король холма вызов, цель которого заключается в создании программы , которая выигрывает чаще , чем любые из его противников в самом низком скандинавском аукционе.
вход
В качестве входных данных программа получит все ставки предыдущих раундов, по одному раунду на строку, все ставки разделены пробелами следующим образом:
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
Каждый столбец ввода представляет цену одного бота. Первый столбец - это заявки принимающей программы, а остальные расположены в случайном порядке. Благодаря хаммару и Питер Тейлор за их вклад.
Входные данные предоставляются в качестве единственного аргумента командной строки (многострочный) вашей программы:
./test1 '1 2
3 4
5 6
1 2'
Это означает, что ваша программа должна быть запущена из командной строки. Пожалуйста, приведите пример вызова как часть вашего ответа.
Только в первом раунде для того, чтобы дать вам знать, с каким количеством ботов вы столкнулись, вход будет представлять собой строку0
s - по одной для каждого бота.
Выход
Ваша программа должна вывести свою ставку в виде целого числа в диапазоне от 1 до 100 (включительно).
Программа для оценки
Это моя программа подсчета очков - любые предложения по дополнениям, улучшениям или исправлениям ошибок будут приветствоваться.
#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;
}
Тест игроков
Уверенный Всегда ставок 1.
#include <stdio.h>
int main()
{
printf("1");
return 0;
}
Random100 Ставки в случайном порядке по всему диапазону
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%100+1);
return 0;
}
Random20 Ставки в случайном порядке от 1 до 20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%20+1);
return 0;
}
Random5 Ставки в случайном порядке между 1 и 5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%5+1);
return 0;
}
Пример прогона:
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
Эти игроки предназначены только для тестирования. Они НЕ будут включены в конкурс. Вы можете ввести столько ботов, сколько пожелаете, поэтому, если кто-то введет бота, который только угадает1
, вы можете ввести другого, который сделает то же самое, чтобы сделать его бесполезным.
победитель
Победителем в каждом раунде является тот, который дает самую низкую уникальную ставку. Таким образом, учитывая раунд, в котором сделаны следующие ставки: 1 1 3 5 2 3 6 3 2 8 7
победителем станет бот, который сделает ставку, 5
потому что 1
s, 2
s и3
s не уникальны.
Победителем конкурса станет программа, которая побеждает больше всего раз после 100 туров. В случае ничьей общая сумма выигрышных ставок будет использоваться в качестве тай-брейка, а в случае, если это также ничья, наименьшая выигрышная ставка будет использоваться в качестве дополнительного тай-брейка. Эти факторы оценки выводятся программой оценки.
Я буду запускать программу подсчета очков для всех рабочих программ, которые были введены через 2 недели с сегодняшнего дня ( 18 февраля теперь продлено до 23:00 (GMT) 20 февраля ). Я опишу все рабочие записи и приму победителя.
Финальный забив
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
источник
Ответы:
Perl
На этот раз я старался немного усерднее. Это действительно
простосложная стратегия, но я создал основу для расширения.Редактировать: завершить повтор. Эта вещь в нем для победы.
Эта программа принимает по одной строке за раз, после чего следуют две новые строки:
источник
шеф-повар
Поскольку всегда ставить 1 - это проигрышная стратегия , очевидная вещь, которую нужно сделать, - всегда ставить 2 вместо этого. Итак, позвольте мне сделать это. Чтобы сделать эту скучную запись немного более интересной, я решил написать ее в Chef :
В качестве бонуса программа фактически более или менее работает как настоящий - хотя и тривиальный - рецепт, даже если она читается так, как будто писатель был немного испуган. Кажется, грамматика шеф-повара затрудняет написание чего-либо, что включает в себя нечто более сложное, чем смешивание чего-либо в миске и его выпекание, и при этом все еще работает как программа и как рецепт, особенно если какой-либо из глаголов нужно использовать даже немного нерегулярно (как «жареный» → «жареный»).
Изменить: Изменил рецепт с жареных яиц на гофрированные - спасибо Blazer за предложение! Время приготовления и температура должны рассматриваться только как рекомендательные; Я на самом деле еще не попробовал рецепт, поэтому не могу ручаться за их точность.
источник
shirred eggs
, что на самом деле делается в форме для выпечки, и это делает рецепт действительным рецептом приготовления и грамматически правильным.shirr the eggs. shirr the eggs until shirred.
извините за кулинарное образование под моим поясом! :)Python (2.6)
Чрезвычайно просто, но все же мне любопытно, как это будет работать по сравнению с другими подходами.
Просто труба в ставках через стандартный ввод, например
python testbid.py < bids.txt
.РЕДАКТИРОВАТЬ : изменено на «первый раунд все нули»
РЕДАКТИРОВАТЬ : немного изменил «магические числа» (второй раз)
источник
m = random.choice(1,2,2,3,3,3)
бытьm = random.choice([1,2,2,3,3,3])
?Питон (блейзер)
Этот бот анализирует предыдущие раунды и записывает числа победителей. Поэтому выигрышные номера, которые появляются чаще, будут иметь больше шансов быть выбранными. Затем он будет случайным образом выбирать номера из выигрышных номеров (кроме 1 или 2). вместо этого он выберет
23, если это первый раунд.Ввод читается по одной строке за раз. просто введите пустую строку, чтобы прекратить прием вводаХитрость заключается в том, чтобы просто вставить (он автоматически принимает каждую строку с \ n внутри вставки) и дважды нажать клавишу вводаТеперь вы можете просто запустить скрипт с именем файла в командной строке:
файл должен выглядеть так:
-
редактировать: добавлено,or sum(rounds) == 0
чтобы компенсировать недавнее изменение первого раунда всех нулейedit: исправлены проблемы в комментариях, также он позволял получать входные данные из имени файла, и никогда больше не выбирал «2», так как соревнование также отсеивало это. работает либо со всеми 0 в качестве начального ввода, либо вообще без данных в файле
edit2: забыл мин ()
edit3: изменил ввод в соответствии с потребностями ввода вопроса
источник
echo "$@" | python bidding.py
должен сделать работу.TypeError: unsupported operand type(s) for +: 'int' and 'list'
для строки 23. Я использую Python 2.6.1, это проблема? мне нужна более новая версия? Я получаю ту же проблему, не используя скрипт bash.Шварценбек (Скала)
Шварценбек не должен забивать голы. Он - уборка для Беккенбауэра, которая скоро последует. :)
Чтобы использовать его, вам нужен компилятор и скомпилировать его
Тогда вы можете запустить его:
Изменить: дальнейшие настройки.
источник
Стратег (Рубин)
Реализует сотни простых стратегий: для каждого раунда выбирает ту, которая выиграла бы в большинстве предыдущих раундов:
Я не уверен, что у меня правильный формат ввода - я не уверен, как генерировать многострочные аргументы командной строки для тестирования его в Windows. (Этот метод работает на IDEone.)
источник
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)
. Я перестану рассматривать новые записи после 11 вечера, но я немного задержу запуск скоринга, чтобы дать вам время посмотреть на ошибку, если хотите.ARGF
вместо ARGV. После этого изменения программа угадывает1
каждый раз. Любые идеи, что я могу сделать, чтобы это исправить?p ARGV.map{|l|l};exit
(Ни один из SO-ответов на вопрос, на который вы ссылаетесь, или подобные ему, похоже, не дает мне ожидаемого ввода)["1 2\n3 4\n5 6\n1 2"]
для тестового ввода в вопросе.Perl
Я подумал, что с тем же успехом могу войти в неизбежное. Более серьезные записи в ближайшее время. В качестве бонуса эта запись никогда не проиграет в соревновании один на один.
источник
JavaScript (node.js)
Подсчитывает, что было самым популярным в последнем раунде, и ставит на единицу меньше, делая ставку 20 и ставку 3 в первом раунде.
Как вызвать:
источник
for
цикл? Должноif(i in numbers)
бытьif(matches[i] in numbers)
ты думаешь?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)
Еще один, на этот раз он копирует точный ответ последнего победителя, если таковой был. Он предназначен для попыток выиграть и заблокировать других участников. ставит,
5
если первый раунд, ставит случайное число из предыдущего раунда, если победителя не былоисточник
Питон (Джо)
Это ни в коем случае не предназначено для победы, но я все равно добавляю немного цвета в толпу :) Это означает среднее значение за последний раунд (Среднее число Джо). Вызывается так же, как и мой первоначальный ответ (который я сейчас назову, потому что кажется, что это то, что делают все классные дети, и это помогает различить их). если начать раунд, он делает ставку
10
.изменить: изменил метод ввода в соответствии с методом ввода вопроса
источник
Python (TotalBots)
Я думаю, что этот будет моим последним, но посмотрим. Требуется предварительное знание того, сколько ботов существует, просто выводя количество конкурирующих ботов, поэтому, если есть 17 ботов (текущее количество ботов плюс этот), он выведет
17
источник
Perl (инспектор здоровья)
Могу поспорить, вы можете догадаться, что он делает.
источник
C ++ (образованная догадка)
Я уже думал, что я пропустил бы крайний срок, но благодаря расширению я все еще могу добавить свою запись. Эта программа компилируется с g ++. Программа пытается угадать статистику других записей и выбрать наименьшую, которая вряд ли будет выбрана какой-либо другой.
источник
Perl (Боб)
Смотрите "Боб", чтобы узнать, как вызвать.
источник
Perl (Алиса)
Принимает данные, аналогичные другим моим ботам.
источник
Perl (Ева)
Я полностью переделал эту запись, чтобы помочь проложить путь другим моим ботам.
Принимает один формат ввода: такой же, как «Боб» и «Алиса».
источник
Brainfuck
Чтобы процитировать вызов:
Ну, так как PhiNotPi вошел в один , позвольте мне войти в другой. Просто чтобы быть другим, я сделаю это в Brainfuck:
Конечно, теперь, когда ставка 1 больше не является выполнимой стратегией, очевидное, что нужно сделать сейчас, это поставить 2 вместо ...
Редактировать: разделить ответ на два в комментариях, переписать обе программы на более интересных языках.
источник
Мюллер (Скала)
Если вы знаете Шварценбека и Беккенбауэра, вы наверняка ожидали Мюллера. А вот и он. Он много выиграет от Беккенбауэра и Шварценбека и должен победить.
Подробная информация о запуске и компиляции: см. Schwarzenbeck
Ближе к цели, сейчас.
источник
Беккенбауэр (Скала)
С помощью Шварценбека Беккенбауэр должен забить несколько голов. Без Шварценбека он ничто.
Подробная информация о запуске и компиляции: см. [Schwarzenbeck] [1]
Редактировать: теперь играть глубже в комнате.
источник
Пакетное Сценарий
Мое представление, дает 5 как его ответ каждый раз ;-)
источник
Eight.bat
Еще один простой ответ, дает 8 каждый раз.
источник
FivesCancel (PHP)
Отменяет решение Мелламокба «всегда 5».
источник
EightsCancel (PHP)
Отменяет решение Мелламокба «всегда 8». Извините, мелламокб!
источник
Python 2.7 - Copycat2
Копирует победителя второго последнего раунда. о нет! в противном случае выводит 7.
источник
Сценарий оболочки (Deep Thought)
Хорошо, так что у меня есть небольшой второй шанс, вот еще одна запись, на этот раз сценарий оболочки (должен работать с любой оболочкой). Это всегда дает ответ на вопрос жизни, вселенной и всего остального.
На самом деле этот алгоритм не совсем корректен, потому что я пропустил задержку в 7,5 миллионов лет. :-)
источник
dirichlet.c
Я думаю, что это проходит через случайные биты слишком быстро, чтобы использовать
/dev/random
, как бы я ни предпочел. Если кто-то захочет протестировать его в Windows, вам придется портировать его самостоятельно, потому что у меня нет доступа к коробке Windows с компилятором C.обоснование
Я не хотел объяснять логику этого до окончания турнира, но теперь, когда объявлен победитель, думаю, пришло время.
По принципу «голубиного отверстия» (он же принцип Дирихле, отсюда и название бота), если есть N конкурирующих ботов, то в [1..1 + N / 2] есть число w, которое либо выиграло, либо выиграло бы, если бы выбран. Поэтому я делаю вывод, что оптимальная стратегия не будет выбирать числа больше 1 + N / 2. Но если N четное, выбор 1+ N / 2 создает меньший выигрышный слот. Поэтому слоты, которые стоит выбрать, это [1 .. ( N +1) / 2].
Это оставляет вопрос о том, как выбрать слот. Для небольшого числа ботов я проверил, что существует равновесие Нэша, когда каждый бот выбирает равномерно среди кандидатов, и я сильно подозреваю, что это будет продолжаться.
Небольшое отклонение в стратегии этого бота от теоретического - просто метагейминг.
источник