Gracias por todas las entradas, la fecha límite ya pasó y los puntajes finales están al final de la pregunta.
Felicitaciones a PhiNotPi por una victoria bastante completa.
Este es un rey de la colina desafío del , cuyo objetivo es crear un programa que gane con más frecuencia que cualquiera de sus oponentes en una subasta de oferta única más baja.
Entrada
Como entrada, el programa recibirá todas las ofertas de rondas anteriores, una ronda por línea, todas las ofertas separadas por espacios de la siguiente manera:
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 columna de la entrada representa la oferta de un bot. La primera columna son las ofertas del programa receptor, mientras que el resto está en un orden generado aleatoriamente. Gracias a hammar y Peter Taylor por su aporte.
La entrada se proporciona como el único argumento de línea de comandos (multilínea) para su programa:
./test1 '1 2
3 4
5 6
1 2'
Esto significa que su programa deberá ser ejecutable desde la línea de comandos. Dé un ejemplo de invocación como parte de su respuesta.
En la primera ronda solo como un medio para hacerle saber a cuántos bots se enfrenta, la entrada será una línea de0
s - uno para cada bot.
Salida
Su programa debe generar su oferta como un entero en el rango de 1 a 100 (inclusive).
Programa de anotadores
Este es mi programa de puntuación: cualquier sugerencia para adiciones, mejoras o correcciones de errores sería bienvenida.
#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;
}
Jugadores de prueba
Uno tiene confianza Siempre ofrece 1.
#include <stdio.h>
int main()
{
printf("1");
return 0;
}
Random100 Ofertas al azar en todo el rango
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%100+1);
return 0;
}
Aleatorio 20 Ofertas al azar entre 1 y 20
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%20+1);
return 0;
}
Random5 Ofertas al azar entre 1 y 5
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(getpid());
printf("%d",rand()%5+1);
return 0;
}
Ejemplo de ejecución:
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
Estos jugadores son solo para fines de prueba. NO serán incluidos en la competencia. Puede ingresar tantos bots como desee, por lo que si alguien ingresa un bot que solo adivina1
, puede ingresar otro que haga lo mismo para inutilizarlo.
Ganador
El bot ganador en cada ronda es el que ofrece la oferta única más baja . Entonces, dada una ronda en la que se realizan las siguientes ofertas: 1 1 3 5 2 3 6 3 2 8 7
el ganador sería el bot que oferte 5
porque los 1
s, 2
sy 3
s no son únicos.
El ganador de la competencia será el programa que gane más veces después de 100 rondas. En caso de empate, el total de las ofertas ganadoras se usará como un desempate, y en el caso de que también sea un empate, la oferta ganadora más baja se usará como un desempate adicional. Todos estos factores de puntuación son producidos por el programa de puntuación.
Ejecutaré el programa de puntuación en todos los programas de trabajo que se hayan ingresado dentro de 2 semanas a partir de hoy (el 18 de febrero ahora se extiende hasta las 11 p.m. (GMT) del 20 de febrero ). Votaré todas las entradas en funcionamiento y aceptaré al ganador de mi carrera de puntuación.
Carrera final de puntuación
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
fuente
Respuestas:
Perl
Lo intenté un poco más esta vez. Es un muy
simpleestrategia compleja, pero he configurado el marco para la expansión.Editar: completa rehacer. Esta cosa está ahí para la victoria.
Este programa toma la entrada de una línea a la vez, seguida de dos nuevas líneas:
fuente
Cocinero
Como siempre apostar 1 es ahora una estrategia perdedora , lo obvio es apostar siempre 2 . Entonces déjame hacer eso. Para hacer que esta entrada aburrida fuera un poco más interesante, decidí escribirla en Chef :
Como beneficio adicional, el programa en realidad funciona más o menos como una receta real, aunque trivial, incluso si se lee como si el escritor estuviera un poco, um, horneado. La gramática del Chef parece hacer que sea bastante difícil escribir algo que involucre algo más complicado que mezclar cosas en un tazón y hornearlo y aún así hacerlo funcionar como un programa y como una receta, especialmente si alguno de los verbos que uno quiere usar son incluso ligeramente irregulares (como "alevines" → "fritos").
Editar: cambió la receta de frito a fruncidas huevos - gracias a la chaqueta por la sugerencia! El tiempo y la temperatura de cocción deben considerarse solo informativos; Todavía no he probado la receta, así que no puedo garantizar su precisión.
fuente
shirred eggs
, que en realidad se hace en una fuente para horno y eso haría que la receta sea una receta de cocina válida y gramaticalmente correcta.shirr the eggs. shirr the eggs until shirred.
¡Horray por tener educación culinaria en mi haber! :)Python (2.6)
Extremadamente simple, pero aún tengo curiosidad por saber cómo funcionará en comparación con los otros enfoques.
Simplemente ingrese las ofertas a través de stdin, por ejemplo
python testbid.py < bids.txt
.EDITAR : cambiado para la 'primera ronda todos ceros'
EDITAR : cambió un poco los 'números mágicos' (una segunda vez)
fuente
m = random.choice(1,2,2,3,3,3)
serm = random.choice([1,2,2,3,3,3])
?Python (Blazer)
Este bot analiza las rondas anteriores y registra los números que ganan. Por lo tanto, los números ganadores que aparecen con más frecuencia tendrán una mejor oportunidad de ser seleccionados. Luego elegirá al azar los números de los números ganadores (que no sean 1 o 2). elegirá
23 si es la primera ronda.La entrada se lee una línea a la vez. simplemente ingrese una línea vacía para dejar de aceptar entradasUn truco es simplemente pegar (acepta automáticamente cada línea con \ n dentro del pegado) y presionar enter dos vecesAhora puede ejecutar el script con un nombre de archivo en la línea de comando:
el archivo debería verse así:
-
editar: agregadoor sum(rounds) == 0
para compensar el reciente cambio de primera ronda de todos ceroseditar: se corrigieron problemas en los comentarios, también permitió recibir información de un nombre de archivo, y ya nunca elige '2' ya que la competencia también lo eliminó. funciona con todos los 0 como entrada inicial o sin datos en el archivo
edit2: olvidé un min ()
edit3: entrada modificada para adaptarse a las necesidades de entrada de la pregunta
fuente
echo "$@" | python bidding.py
Debería hacer el trabajo.TypeError: unsupported operand type(s) for +: 'int' and 'list'
para la línea 23. Estoy usando Python 2.6.1, ¿es ese el problema? ¿Necesito una versión más nueva? Me sale el mismo problema sin usar el script bash.Schwarzenbeck (Scala)
Se supone que Schwarzenbeck no marca los goles. Él es la limpieza de Beckenbauer, que sigue pronto. :)
Para usarlo, necesitas un compilador y compilarlo
Entonces puedes ejecutarlo:
Editar: ajustes adicionales.
fuente
Estratega (Ruby)
Implementa cientos de estrategias simples: para cada ronda, elige la que hubiera ganado la mayoría de las rondas anteriores:
No estoy seguro de tener el formato de entrada correcto: no estoy seguro de cómo generar argumentos de línea de comandos de varias líneas para probarlo en Windows. (Este método parece funcionar en IDEone).
fuente
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)
. Dejaré de considerar nuevas entradas después de las 11 p.m., pero retrasaré un poco la ejecución de la puntuación para darle tiempo para ver el error si lo desea.ARGF
lugar de ARGV. Después de hacer ese cambio, el programa adivina1
cada vez. ¿Alguna idea de lo que puedo hacer para solucionarlo?p ARGV.map{|l|l};exit
(Ninguna de las respuestas SO a la pregunta que hace referencia o similares parecen darme la entrada esperada)["1 2\n3 4\n5 6\n1 2"]
para la entrada de prueba en la pregunta.Perl
Pensé que bien podría entrar en lo inevitable. Más entradas serias próximamente. Como beneficio adicional, esta entrada nunca perderá en una competencia uno a uno.
fuente
JavaScript (node.js)
Cuenta lo que fue más popular en la última ronda y ofrece uno menos que eso, ajustando a 20 y ofreciendo 3 en la primera ronda.
Cómo invocar:
fuente
for
bucle. ¿Deberíasif(i in numbers)
estarloif(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)
Otro más, esta vez copia la respuesta exacta que tuvo el último ganador, si hubiera una. Está diseñado para intentar ganar y bloquear a otros postores. puja
5
si la primera ronda, puja un número aleatorio de la ronda anterior si de alguna manera no hubo ganadorfuente
Python (Joe)
De ninguna manera está diseñado para ganar, pero de todos modos lo estoy lanzando para agregar algo de color a la multitud :) Ofrece el promedio de la última ronda (Joe promedio). Invocado lo mismo que mi respuesta original (que ahora nombraré porque parece que eso es lo que están haciendo todos los niños geniales, y ayuda a distinguir los dos). si comienza la ronda, hace una oferta
10
.editar: método de entrada modificado para adaptarse al método de entrada de la pregunta
fuente
Python (TotalBots)
Creo que este será el último, pero ya veremos. Aprovecha la ventaja de saber cuántos bots hay simplemente generando el número de bots competidores, por lo que si hay 17 bots (número actual de bots, más este), generará
17
fuente
Perl (inspector de salud)
Apuesto a que puedes adivinar lo que hace.
fuente
C ++ (conjetura educada)
Ya pensé que habría pasado la fecha límite, pero gracias a la extensión aún puedo agregar mi entrada. Este programa compila con g ++. El programa intenta adivinar las estadísticas de las otras entradas y elegir la más pequeña que probablemente no sea elegida por ninguna otra.
fuente
Perl (Bob)
Ver "Bob" para saber cómo invocar.
fuente
Perl (Alice)
Toma datos similares a mis otros bots.
fuente
Perl (Eva)
Rehice completamente esta entrada para ayudar a allanar el camino para mis otros bots.
Toma un formato de entrada: el mismo que "Bob" y "Alice".
fuente
Brainfuck
Para citar el desafío:
Bueno, como PhiNotPi ingresó uno , déjame ingresar otro. Para ser diferente, lo haré en Brainfuck:
Por supuesto, ahora que apostar 1 ya no es una estrategia factible, lo más obvio ahora es apostar 2 ...
Editar: divide la respuesta en dos por comentarios, reescribió ambos programas en idiomas más interesantes.
fuente
Mueller (Scala)
Si conoces a Schwarzenbeck y Beckenbauer, seguramente esperabas a Mueller. Aquí está él. Se beneficiará mucho de Beckenbauer y Schwarzenbeck y se supone que gana.
Detalles sobre el funcionamiento y la compilación: ver Schwarzenbeck
Más cerca de la meta, ahora.
fuente
Beckenbauer (Scala)
Con la ayuda de Schwarzenbeck, se supone que Beckenbauer marca algunos goles. Sin Schwarzenbeck, él no es nada.
Detalles sobre la ejecución y la compilación: Ver [Schwarzenbeck] [1]
Editar: Jugar más profundo en la sala ahora, también.
fuente
Scripting por lotes
Mi presentación, da 5 como respuesta cada vez ;-)
fuente
Ocho.bat
Otra respuesta simple, da 8 cada vez.
fuente
FivesCancel (PHP)
Cancela la solución "siempre 5" de mellamokb.
fuente
EightsCancel (PHP)
Cancela la solución "always 8" de mellamokb. Lo siento, mellamokb!
fuente
Python 2.7 - Copycat2
Copia el ganador de la segunda última ronda. ¡Oh no! de lo contrario salidas 7.
fuente
Script de Shell (pensamiento profundo)
OK, para que tenga una pequeña segunda oportunidad, aquí hay otra entrada, esta vez un script de shell (debería funcionar con cualquier shell). Esto siempre da la respuesta a la pregunta de la vida, el universo y todo.
En realidad, este algoritmo no es del todo correcto porque omití el retraso de 7,5 millones de años. :-)
fuente
dirichlet.c
Creo que esto pasa por bits aleatorios demasiado rápido para usar
/dev/random
, por mucho que prefiera. Si alguien quiere probarlo en Windows, tendrá que portarlo usted mismo, porque no tengo acceso a un cuadro de Windows con un compilador de C.Razón fundamental
No quería explicar la lógica detrás de esto antes de que terminara el torneo, pero ahora que se ha anunciado el ganador, creo que es hora.
Según el principio del agujero de paloma (también conocido como el principio de Dirichlet, de ahí el nombre del bot), si hay N bots competidores, entonces hay un número w en [1..1 + N / 2] que ganó o habría ganado si seleccionado. Por lo tanto, concluyo que la estrategia óptima no seleccionará números mayores que 1+ N / 2. Pero si N es par, seleccionar 1+ N / 2 crea una ranura ganadora más pequeña. Por lo tanto, los espacios que vale la pena seleccionar son [1 .. ( N +1) / 2].
Eso deja la pregunta de cómo seleccionar una ranura. Para un pequeño número de bots, verifiqué que hay un equilibrio de Nash cuando cada bot selecciona de manera uniforme entre los candidatos, y sospecho firmemente que esto seguirá siendo cierto.
La desviación menor en la estrategia de este bot de la teórica es simplemente metagaming.
fuente