Obrigado por todas as inscrições, o prazo já passou e as pontuações finais estão no final da pergunta.
Parabéns ao PhiNotPi por uma vitória bastante abrangente.
Esse é um desafio do tipo rei da colina , cujo objetivo é criar um programa que vence com mais frequência do que qualquer um de seus oponentes em um leilão de lance único mais baixo.
Entrada
Como entrada, o programa receberá todos os lances das rodadas anteriores, uma rodada por linha, todos os lances separados por espaços da seguinte forma:
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
Cada coluna da entrada representa a licitação de um bot. A primeira coluna são os lances do programa receptor, enquanto o restante está em uma ordem gerada aleatoriamente. Agradecemos a Hammar e Peter Taylor por sua contribuição.
A entrada é fornecida como o primeiro e único argumento de linha de comando (várias linhas) do seu programa:
./test1 '1 2
3 4
5 6
1 2'
Isso significa que seu programa precisará ser executável na linha de comando. Por favor, dê um exemplo de invocação como parte de sua resposta.
Na primeira rodada, apenas como um meio de informar quantos bots você enfrenta, a entrada será uma linha de 0
s - um para cada bot.
Saída
Seu programa deve exibir seu lance como um número inteiro no intervalo de 1 a 100 (inclusive).
Programa Marcador
Este é o meu programa de pontuação - todas as sugestões de adições, melhorias ou correções de erros serão bem-vindas.
#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;
}
Jogadores de teste
Estamos confiantes Sempre lances 1.
#include <stdio.h>
int main()
{
printf("1");
return 0;
}
Random100 Lances aleatórios em todo o intervalo
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%100+1);
return 0;
}
Random20 lances aleatórios entre 1 e 20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%20+1);
return 0;
}
Random5 Lances aleatórios entre 1 e 5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%5+1);
return 0;
}
Exemplo de detalhamento:
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
Esses jogadores são apenas para fins de teste. Eles NÃO serão incluídos na competição. Você pode inserir quantos bots desejar, portanto, se alguém inserir um bot que apenas adivinha 1
, você poderá inserir outro que faça o mesmo para torná-lo inútil.
Vencedora
O bot vencedor em cada rodada é o que oferece o menor lance único . Assim, dada uma rodada em que as seguintes propostas são feitas: 1 1 3 5 2 3 6 3 2 8 7
o vencedor seria o bot que a oferta 5
porque os 1
s, 2
s e 3
s não são exclusivos.
O vencedor da competição será o programa que vencer mais vezes após 100 rodadas. Em caso de empate, o total de lances vencedores será usado como desempate e, no caso de empate, a menor oferta vencedora será usada como empate adicional. Esses fatores de pontuação são todos gerados pelo programa de pontuação.
Vou executar o programa de pontuação em todos os programas de trabalho que foram inscritos em duas semanas a partir de hoje ( 18 de fevereiro agora estendido para 23h (GMT) de 20 de fevereiro ). Eu votarei todas as entradas de trabalho e aceitarei o vencedor da minha corrida de pontuação.
Pontuação final
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
fonte
Respostas:
Perl
Eu tentei um pouco mais dessa vez. É uma estratégia complexa realmente
simples, mas eu configurei a estrutura para expansão.Editar: refazer completo. Esta coisa está nele para a vitória.
Este programa recebe uma linha de cada vez, seguida por duas novas linhas:
fonte
Chefe de cozinha
Como sempre apostar 1 agora é uma estratégia perdida , a coisa mais óbvia a fazer é apostar sempre 2 . Então deixe-me fazer isso. Para tornar essa entrada um pouco chata, um pouco mais interessante, decidi escrevê-la no Chef :
Como um bônus, o programa realmente funciona mais ou menos como uma receita real - mesmo que trivial -, mesmo que pareça meio como se o escritor estivesse um pouco, hum, assado. A gramática do Chef parece dificultar bastante a escrita de qualquer coisa que envolva algo mais complicado do que misturar coisas em uma tigela e assá-las e ainda assim fazer com que funcione como um programa e como receita, especialmente se algum dos verbos que você deseja usar são um pouco irregulares (como "fritar" → "frito").
Edit: Mudou a receita de ovos fritos para shirred - graças a Blazer pela sugestão! O tempo de cozimento e a temperatura devem ser considerados apenas informativos; Ainda não experimentei a receita, então não posso garantir a precisão deles.
fonte
shirred eggs
, o que é realmente feito em uma assadeira e que tornaria a receita uma receita culinária válida e gramaticalmente correta.shirr the eggs. shirr the eggs until shirred.
horrível por ter educação culinária debaixo do cinto! :)Python (2.6)
Extremamente simples, mas ainda estou curioso para saber como será o desempenho em comparação com as outras abordagens.
Basta enviar os lances via stdin, por exemplo
python testbid.py < bids.txt
.EDIT : alterado para o 'primeiro turno todos os zeros'
EDIT : mudou os 'números mágicos' um pouco (uma segunda vez)
fonte
m = random.choice(1,2,2,3,3,3)
serm = random.choice([1,2,2,3,3,3])
?Python (Blazer)
Este bot analisa as rodadas anteriores e registra os números que vencem. Os números vencedores que aparecerem com mais frequência terão, portanto, melhores chances de serem escolhidos. Ele escolherá aleatoriamente os números dos números vencedores (exceto 1 ou 2). em vez disso, escolherá
23 se for a primeira rodada.A entrada é lida uma linha por vez. basta digitar uma linha vazia para parar de aceitar entradaUm truque é apenas colar (ele aceita automaticamente cada linha com \ n dentro da pasta) e pressionar enter duas vezesAgora você pode apenas executar o script com um nome de arquivo na linha de comando:
O arquivo deve ficar assim:
-
editar: adicionadoor sum(rounds) == 0
para compensar a alteração recente da primeira rodada com todos os zerosedit: problemas nos comentários corrigidos, também permitiram receber a entrada de um nome de arquivo e nunca mais escolhe '2', já que a competição eliminou isso também. funciona com todos os 0 como entrada inicial ou nenhum dado no arquivo
edit2: esqueceu um min ()
edit3: entrada alterada para atender às necessidades de entrada da pergunta
fonte
echo "$@" | python bidding.py
deve fazer o trabalho.TypeError: unsupported operand type(s) for +: 'int' and 'list'
para a linha 23. Estou usando o Python 2.6.1, esse é o problema? preciso de uma versão mais recente? Eu recebo o mesmo problema sem usar o script bash.Schwarzenbeck (Scala)
Schwarzenbeck não deve marcar os gols. Ele é a limpeza de Beckenbauer, que segue em breve. :)
Para usá-lo, você precisa de um compilador e compilá-lo
Então você pode executá-lo:
Editar: outros ajustes.
fonte
Estrategista (Ruby)
Implementa centenas de estratégias simples: para cada rodada, escolhe aquela que teria vencido as rodadas mais anteriores:
Não tenho certeza se o formato de entrada está correto - não sei como gerar argumentos de linha de comando com várias linhas para testá-lo no Windows. (Este método parece funcionar no IDEone.)
fonte
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)
. Pararei de considerar novas entradas depois das 23:00, mas atrasarei um pouco a execução da pontuação para que você tenha tempo de analisar o bug, se desejar.ARGF
vez do ARGV. Depois de fazer essa alteração, o programa1
sempre adivinha . Alguma idéia do que eu posso fazer para corrigi-lo?p ARGV.map{|l|l};exit
(Nenhuma das respostas do SO para a pergunta que você faz referência ou outras semelhantes parecem me dar a entrada esperada)["1 2\n3 4\n5 6\n1 2"]
para a entrada de teste na pergunta.Perl
Imaginei que também poderia entrar no inevitável. Entradas mais sérias em breve. Como um bônus, essa inscrição nunca será perdida em uma competição individual.
fonte
JavaScript (node.js)
Conta o que foi mais popular na última rodada e oferece lances a menos do que isso, chegando a 20 e oferecendo 3 na primeira rodada.
Como invocar:
fonte
for
loop? Você deveriaif(i in numbers)
estarif(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)
Ainda outro, desta vez copia a resposta exata que o último vencedor teve, se houver. Ele foi designado para tentar ganhar e bloquear outros concorrentes. faz lances
5
se a primeira rodada, faz um número aleatório da rodada anterior se de alguma forma não houver vencedorfonte
Python (Joe)
Isso não é de forma alguma projetado para vencer, mas eu estou jogando isso de qualquer maneira para adicionar um pouco de cor à multidão :) Ele oferece a média da última rodada (Joe Médio). Invocou o mesmo que a minha resposta original (que agora vou citar porque parece que é isso que todas as crianças legais estão fazendo e ajuda a distinguir as duas). se começar a rodada, ele licita
10
.edit: método de entrada alterado para se adequar ao método de entrada da pergunta
fonte
Python (TotalBots)
Eu acho que este será o meu último, mas vamos ver. É necessário saber quantos bots existem simplesmente produzindo o número de bots concorrentes; portanto, se houver 17 bots (número atual de bots, mais este), ele produzirá
17
fonte
Perl (Inspetor de Saúde)
Aposto que você pode adivinhar o que faz.
fonte
C ++ (palpite educado)
Eu já pensei que teria perdido o prazo, mas graças à extensão ainda posso adicionar minha entrada. Este programa compila com g ++. O programa tenta adivinhar as estatísticas das outras entradas e escolher a menor que provavelmente não será escolhida por nenhuma outra.
fonte
Perl (Bob)
Veja "Bob" para saber como chamar.
fonte
Perl (Alice)
Toma entrada semelhante aos meus outros bots.
fonte
Perl (Eva)
Eu refiz completamente essa entrada para ajudar a pavimentar o caminho para meus outros bots.
Toma um formato de entrada: o mesmo que "Bob" e "Alice".
fonte
Brainfuck
Para citar o desafio:
Bem, desde que o PhiNotPi inseriu um , deixe-me inserir outro. Só para ser diferente, eu o farei em Brainfuck:
Obviamente, agora que apostar 1 não é mais uma estratégia viável, o óbvio a se fazer agora é apostar 2 ...
Editar: Divida a resposta em duas por comentários, reescreva os dois programas em idiomas mais interessantes.
fonte
Mueller (Scala)
Se você conhece Schwarzenbeck e Beckenbauer, certamente esperava Mueller. Aqui está ele. Ele se beneficiará muito de Beckenbauer e Schwarzenbeck e deve vencer.
Detalhes sobre execução e compilação: Veja Schwarzenbeck
Mais perto do objetivo, agora.
fonte
Beckenbauer (Scala)
Com a ajuda de Schwarzenbeck, Beckenbauer deve marcar alguns gols. Sem Schwarzenbeck, ele não é nada.
Detalhes sobre execução e compilação: Veja [Schwarzenbeck] [1]
Edit: Jogando mais fundo na sala agora, também.
fonte
Script em lote
Minha submissão, dá 5 como resposta toda vez ;-)
fonte
Eight.bat
Outra resposta simples, sempre dá 8.
fonte
FivesCancel (PHP)
Cancela a solução "sempre 5" da mellamokb.
fonte
EightsCancel (PHP)
Cancela a solução "sempre 8" da mellamokb. Desculpe, mellamokb!
fonte
Python 2.7 - Copycat2
Copia o vencedor da segunda última rodada. Ah não! caso contrário, gera 7.
fonte
Script de shell (pensamento profundo)
OK, para que eu tenha uma segunda chance, aqui está outra entrada, desta vez um script de shell (deve funcionar com qualquer shell). Isso sempre dá a resposta para a questão da vida, do universo e tudo.
Na verdade, esse algoritmo não está totalmente correto porque eu omiti o atraso de 7,5 milhões de anos. :-)
fonte
dirichlet.c
Eu acho que isso passa por bits aleatórios muito rápido para usar
/dev/random
, por mais que eu prefira. Se alguém quiser testá-lo no Windows, será necessário portá-lo, porque não tenho acesso a uma caixa do Windows com um compilador C.Fundamentação
Eu não queria explicar a lógica por trás disso antes do torneio terminar, mas agora que o vencedor foi anunciado, acho que está na hora.
Pelo princípio do buraco do pombo (também conhecido como princípio de Dirichlet, daí o nome do bot), se houver N bots concorrentes, haverá um número w em [1..1 + N / 2] que ganhou ou teria ganho se selecionado. Concluo, portanto, que a estratégia ideal não selecionará números maiores que 1+ N / 2. Mas se N for par, selecionar 1+ N / 2 cria um slot vencedor menor. Portanto, os slots que valem a pena selecionar são [1 .. ( N +1) / 2].
Isso deixa a questão de como selecionar um slot. Para um pequeno número de bots, verifiquei que há um equilíbrio de Nash quando cada bot é selecionado de maneira uniforme entre os candidatos, e suspeito fortemente que isso continuará verdadeiro.
O pequeno desvio da estratégia deste bot em relação à teórica é simplesmente metagame.
fonte