সর্বনিম্ন অনন্য বিড নিলাম


22

সমস্ত এন্ট্রি জন্য ধন্যবাদ, সময়সীমা এখন শেষ হয়েছে এবং চূড়ান্ত স্কোর প্রশ্নের শেষে হয়। মোটামুটি বিস্তৃত বিজয়ের
জন্য ফিলনটপিকে অভিনন্দন ।

এটি চ্যালেঞ্জ, যার লক্ষ্য হ'ল এমন একটি প্রোগ্রাম তৈরি করা যা সর্বনিম্ন অনন্য বিড নিলামে তার বিরোধীদের চেয়ে বেশিবার জয়ী হয়।

ইনপুট

ইনপুট হিসাবে প্রোগ্রামটি পূর্ববর্তী সমস্ত রাউন্ডের বিডিং পাবেন, প্রতি লাইন এক রাউন্ড, সমস্ত বিডগুলি স্পেস দ্বারা পৃথক করে পৃথক করে:

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বটের বিরুদ্ধে রয়েছেন, ইনপুটটি হ'ল একটি লাইন - প্রতিটি বটের জন্য একটি one

আউটপুট

আপনার প্রোগ্রামটির বিডটি 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;
}

এলোমেলোভাবে 100 পুরো বিস্তৃত বিড

#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;
}

1 থেকে 5 এর মধ্যে এলোমেলোভাবে র্যান্ডম 5 বিড B

#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এস, 2এস এবং 3এসগুলি অনন্য নয়।

প্রতিযোগিতার বিজয়ী হবেন এমন প্রোগ্রাম যা 100 রাউন্ডের পরে সর্বাধিকবার জয়ী হয়। টাই করার ক্ষেত্রে মোট বিজয়ী বিডগুলি টাই-ব্রেকার হিসাবে ব্যবহৃত হবে এবং সেটিও যদি টাই হয়, সর্বনিম্ন বিজয়ী বিডটি আরও টাই-ব্রেকার হিসাবে ব্যবহৃত হবে। এই স্কোরিং ফ্যাক্টরগুলি সমস্ত স্কোরিং প্রোগ্রামের আউটপুট।

আমি আজ থেকে 2 সপ্তাহে প্রবেশ করা সমস্ত কার্যনির্বাহী প্রোগ্রামগুলিতে স্কোরিং প্রোগ্রামটি চালাব ( 18 ফেব্রুয়ারী এখন 20 ফেব্রুয়ারি রাত 11 টা (GMT) পর্যন্ত প্রসারিত )। আমি সমস্ত কার্যকরী এন্ট্রিগুলিকে উজ্জীবিত করব এবং আমার স্কোরিং রানের বিজয়ীকে গ্রহণ করব।

ফাইনাল স্কোরিং রান

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

1
হুম ... নিয়মগুলি যেমন লেখা আছে তেমন, আমি 100 টি প্রোগ্রাম প্রবেশ করে সত্যই গেমটি নষ্ট করতে পারি যা প্রত্যেকে সর্বদা একটি নির্দিষ্ট নম্বরকে বিড করে।
ইলমারি করোনেন

1
আপনি দুটি বাক্য বলতে পারেন, বিজয়ী বটটি কীভাবে বেছে নেওয়া হয়? আমি পাই না।
ব্যবহারকারী অজানা

@ ইলমারি কারোনেন এটি সত্য, আপনি করতে পারেন। তবে আমি বিশ্বাস করি যে লোকেরা তা করবে না। আমি মনে করি ব্যক্তি হিসাবে আমি প্রবেশের সংখ্যা সীমাবদ্ধ করতে পারতাম, তবে আমার মনে হয় আমি যদি কেবল কোনও স্পলারের সাথে আসে তবে আমি কেবল এটিকেই অবলম্বন করব।
গ্যারেথ

@ ইউজারুননড আমি নিলামের রাউন্ডগুলি কীভাবে কাজ করে তা পরিষ্কার করার চেষ্টা করেছি।
গ্যারেথ

1
@ ফিলনটপি: দোষী মনে করবেন না। আপনি নিয়মের মধ্যে জয়ী।
স্টিভেন রাম্বালস্কি

উত্তর:


9

পার্ল

আমি এবার আরও একটু চেষ্টা করেছি। এটি সত্যিই একটি সহজ জটিল কৌশল, তবে আমি প্রসারণের কাঠামোটি সেট করেছি।

সম্পাদনা: সম্পূর্ণ পুনরায়। এই জিনিস এটি জয়ের জন্য।

    sub prob{
$_[0]+$_[1]-$_[0]*$_[1]
}

$_=<>;
INPUT:{

tr/ /,/;
@in = eval;
for(1..$#in){
 $bids[$rnum][$in[$_]]++
}
for(0..$#in){
 $tbids[$rnum][$in[$_]]++
}
$rnum++;
$_=<>;
if($_ ne"\n"){redo INPUT}
}

for(0..100){$pre[$_]=0}

dirichlet: for(2..$#in/2+2){    #rough approximation, 
$pre[$_]=prob($pre[$_], 1/int($#in/2+1))
}

CDP:{
    @cdps1=(1,1,1,2,2,3,3,4);
    @cdps2=(-2,-1,0,1,1,2,2,3,3);
    for($a=0;$a<8;$a++){
    for($b=0;$b<9;$b++){
     $sum=$cdps1[$a]+$cdps2[$b];
     if($sum<1){$sum=1};
     $pre[$sum] = prob($pre[$sum], 1/72);
    }
    }
}

blazer: {
for($r=1;$r<$rnum;$r++){
winner: for($pnt=1;$pnt<101;$pnt++){
        if($tbids[$r][$pnt] == 1){
            if($pnt > 2){
                $winnum[$pnt]++;
            $wins++;
            }
        last winner
        }
}
    }
    if($wins==0){
    $pre[3]=prob($pre[3], 1);last blazer
    }
    for(1..100){
    $pre[$_]=prob($pre[$_], $winnum[$_]/$wins);
    }
}

CC1: for($pnt=1;$pnt<101;$pnt++){
    if($tbids[$rnum-1][$pnt] == 1){
        $pre[$pnt] = prob($pre[$pnt], 1);last CC1
    }
    if($pnt==100){
        for($pnt2=1;$pnt2<100;$pnt2++){
        $pre[$pnt2] = prob($pre[$pnt2], $tbids[$rnum-1][$pnt2]/($#in+1));
    }
    }
}

CC2: for($pnt=1;$pnt<101;$pnt++){
    if($rnum-2<0){$pre[7] = prob($pre[7], 1);last CC2}
    if($tbids[$rnum-2][$pnt] == 1){
        $pre[$pnt] = prob($pre[$pnt], 1);last CC2
    }
    if($pnt==100){
        $pre[7] = prob($pre[7], 1);last CC2
    }
}

one: {
$pre[1] = prob($pre[1], 1);
}

two: {
$pre[2] = prob($pre[2], 1);
}

five: {
$pre[5] = prob($pre[5], 1);
}

eight: {
$pre[8] = prob($pre[8], 1);
}

fortytwo: {
$pre[42] = prob($pre[42], 1);
}

mueller: {
    $a=($#in+2)/4;
    $pre[int$a]=prob($pre[int$a], 1)
}

schwarzenbeck: {
    $a=($#in+2)/4+1;
    $pre[int$a]=prob($pre[int$a], 1)
}

beckenbauer: {
    $a=($#in+2)/4+2;
    $pre[int$a]=prob($pre[int$a], 1)
}

totalbots: {
    $pre[$#in+1]=prob($pre[$#in+1], 1)
}

joe: {
$sum=0;
    for(1..100){
    $sum+=$tbids[$rnum-1][$_];
}
    $average=$sum/($#in+1);
    if($average==0){$average=10};
    $pre[$average]=prob($pre[$average], 1);
}

node: {
$max=0;$maxloc=0;
for(1..100){
    if($tbids[$rnum-1][$_]>$max){$max=$tbids[$rnum-1][$_];$maxloc=$_}
}
$maxloc--;
#if($maxloc==0){
$maxloc=20;
#}
if($rnum==1){$maxloc=3}
    $pre[$maxloc]=prob($pre[$maxloc], 1);
}
#print"\n@pre\n\n";

decide: for(1..100){if($pre[$_]<0.5){print; last decide}}

এই প্রোগ্রামটি একবারে ইনপুট এক লাইন নেয়, তার পরে দুটি নতুন লাইন:

perl PhiNotPi2.plx
1 2 3 3 2
2 1 3 1 3
2 1 1 1 3
[empty line]

ঠিক আছে, এটি মেটাগেমিংকে চরম পর্যায়ে নিয়ে যায়।
পিটার টেইলর

@ পেটারটাইলার আমি কি খুব বেশি দূরে যাচ্ছি? আমি কি আমার আসলটিতে ফিরে যেতে পারি?
PhiNotPi

2
এটি নিয়মের আইনজীবীদের জন্য কুখ্যাত একটি সাইট - এটি পুরোপুরি ন্যায্য। তবে আমি এই সিদ্ধান্তে পৌঁছে যাচ্ছি যে পাহাড়ের প্রতিযোগিতার জন্য স্ট্যাক এক্সচেঞ্জ ব্যবস্থা সম্ভবত সেরা হতে পারে না।
পিটার টেলর

আমিও এই সিদ্ধান্তে পৌঁছেছি। আমাদের ভবিষ্যতের প্রতিযোগিতায় দর্শন থেকে বটগুলি গোপন করার একটি পদ্ধতি তৈরি করতে হবে। আমি জানি সবার জন্য, এখনই কেউ আমার বটের বিরুদ্ধে মেটাগেম করছে।
PhiNotPi

লোল, এটি আমার ধারণা ছিল: পি। যেহেতু আপনি ইতিমধ্যে বাস্তবায়ন করেছেন, এবং আমি অলস বোধ করছি, আমি আপনাকে তা দিয়ে দেব :) দ্রষ্টব্য যে একমাত্র এন্ট্রি যা এটি সহজেই পরাজিত করতে পারে না তা
এলোমেলো

8

পাচক

যেহেতু সর্বদা 1 বাজি দেওয়া এখন একটি হেরে যাওয়া কৌশল , তাই স্পষ্টতই করণীয় হল সর্বদা 2 পরিবর্তে 2 বাজি দেওয়া। সুতরাং আমাকে এটি করতে দিন। এটি অন্যথায় বিরক্তিকর এন্ট্রিটিকে আরও আকর্ষণীয় করে তুলতে আমি শেফের মধ্যে এটি লেখার সিদ্ধান্ত নিয়েছি :

Shirred Eggs.

This recipe prints the number 2 and, in doing so, yields two delicious
shirred eggs.

Ingredients.
2 eggs

Cooking time: 12 minutes.

Pre-heat oven to 175 degrees Celsius.

Method.
Put eggs into mixing bowl. Pour contents of the mixing bowl into the
baking dish. Shirr the eggs. Bake the eggs until shirred.

Serves 1.

বোনাস হিসাবে, প্রোগ্রামটি আরও কম-বেশি বাস্তব হিসাবে কাজ করে - যদি তুচ্ছ - রেসিপি, এমনকি যদি এটি পড়ার মতো করে তোলে তবে লেখক কিছুটা, উম, বেকড। শেফ ব্যাকরণটি এমন কোনও কিছু লিখতে খুব শক্ত করে তোলে যা কোনও বাটিতে স্টাফ মিশ্রণ এবং বেকিংয়ের চেয়ে আরও জটিল কিছু জড়িত এবং এখনও এটি একটি প্রোগ্রাম এবং একটি রেসিপি হিসাবে উভয়ই কাজ করে, বিশেষত ক্রিয়াপদের যে কোনওটি ব্যবহার করতে চায় যদি এমনকি কিছুটা অনিয়মিত (যেমন "ভাজা" → "ভাজা")।

সম্পাদনা করুন: ভাজা থেকে শিরিড ডিমের রেসিপিটি পরিবর্তন করা হয়েছে - পরামর্শের জন্য ব্লেজারকে ধন্যবাদ! রান্নার সময় এবং তাপমাত্রাকে কেবল পরামর্শমূলক হিসাবে বিবেচনা করা উচিত; আমি নিজেই এখনও রেসিপিটি চেষ্টা করে দেখিনি, তাই আমি তাদের যথার্থতার জন্য কোন প্রমাণ দিতে পারি না।


আমি মনে করি এটি 1 আউটপুটস : কোডগলফ.স্ট্যাকেক্সেঞ্জঞ্জ / এ / ৪৪৮১ এ আমার মন্তব্য দেখুন ।
এমএস 210

এটি 2 আউটপুট করে, কমপক্ষে একমে :: শেফ ইন্টারপ্রেটার ব্যবহার করে । চূড়ান্ত লুপটি সেখানে কেবল উদাসীনতার জন্য রয়েছে এবং ডিনারদের ডিমগুলি কাঁচা খেতে হবে না।
ইলমারি করোনেন

আহ, ঠিক আছে, আমি ডিমটি বেকিং ডিশে ইতিমধ্যে ছিল এবং এটাকে হ্রাস করা হয়নি এ বিষয়টি আমি মিস করেছি।
msh210

2
আপনি এটিকে ডাকেন shirred eggs, যা আসলে একটি বেকিং ডিশে করা হয় এবং এটি রেসিপিটিকে আসল বৈধ রান্নার রেসিপি এবং ব্যাকরণগতভাবে সঠিক করে তুলবে। shirr the eggs. shirr the eggs until shirred.আমার বেল্টের অধীনে রন্ধনশিক্ষার জন্য হরর! :)
ব্লেজার

1
রান্নার সময় / তাপমাত্রা ঠিক প্রায় মনে হয় :)। অবশ্যই, এগুলি সর্বদা কেবল গাইডলাইন হিসাবে ব্যবহার করুন, কারণ এটি শেফই নির্ধারণ করেন যে কিছু করা হয়েছে কিনা, সময় / তাপমাত্রা নিজেই নয়!
ব্লেজার

4

পাইথন (২.6)

অত্যন্ত সহজ, তবে এখনও আমি আগ্রহী যে এটি অন্যান্য পদ্ধতির তুলনায় কীভাবে সম্পাদন করবে।

import sys, random
try:
    s = sys.stdin.readlines()[-2]
    m = min(int(x) for x in s.split())
except IndexError:
    m = random.choice([1,1,1,2,2,3,3,4])
a = random.choice([-2,-1,0,1,1,2,2,3,3])
print max(m + a, 1)

Stdin, যেমন মাধ্যমে বিড মধ্যে Just নল python testbid.py < bids.txt

সম্পাদনা : 'প্রথম রাউন্ড সমস্ত জিরো' এর জন্য পরিবর্তন করা হয়েছে

সম্পাদনা করুন : 'ম্যাজিক সংখ্যা' কিছুটা পরিবর্তন করেছেন (দ্বিতীয়বার)


1
করা উচিত নয় m = random.choice(1,2,2,3,3,3)হতে m = random.choice([1,2,2,3,3,3])?
ব্লেজার

এটি একটি ত্রুটি ফেলেছিল যেখানে ব্লেজার বলেছিল এটি সম্ভবত। আমি পরীক্ষার জন্য স্কোয়ার বন্ধনী রেখেছি এবং এটি কার্যকর হয়েছে বলে মনে হয়।
গ্যারেথ

@ ব্লাজার: হ্যাঁ, একেবারে (আমার পক্ষে ছোট টাইপ)। অবহিত করার জন্য ধন্যবাদ।
ক্রিস্টোফিড

4

পাইথন (ব্লেজার)

এই বটটি পূর্ববর্তী রাউন্ডগুলি বিশ্লেষণ করে এবং যে সংখ্যাটি জিতেছে তা রেকর্ড করে। সংখ্যা প্রায়শই প্রদর্শিত হয় তাই পিকিংয়ের আরও ভাল সুযোগ থাকবে। এটি তখন বিজয়ী সংখ্যাগুলি থেকে (1 বা 2 বাদে) এলোমেলোভাবে সংখ্যাগুলি বেছে নেবে। এটি প্রথম রাউন্ডের পরিবর্তে 2 3 টি পছন্দ করবে ।

ইনপুট একবারে এক লাইনে পড়ে। ইনপুট গ্রহণ বন্ধ করতে খালি লাইন লিখুন

একটি কৌশলটি কেবল পেস্ট করা হয় (এটি প্রতিটি পংক্তিতে automatically n পেস্টের মধ্যে স্বয়ংক্রিয়ভাবে গ্রহণ করে) এবং দুবার এন্টার চাপুন

আপনি এখন কমান্ড লাইনে ফাইলের নাম দিয়ে স্ক্রিপ্টটি নষ্ট করতে পারেন:

python bidding.py bidding.txt

ফাইলটি দেখতে এইরকম হওয়া উচিত:

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

-

import random
import sys

winning = [] # record the winning numbers

content = sys.argv[1].split('\n')  
for each in content:
    x = map(int, each.split())
    if len(x)+sum(x) == 0: 
        continue 

    y = []
    for each in x:
        if x.count(each) == 1:
            y.append(each)
    if len(y) > 0: 
        if min(y) not in [1,2]:  #never choose 1 or 2
            winning.append(min(y))

# choose an output
if len(winning) == 0:
    print 3
else:
    print random.choice(winning)

সম্পাদনা: or sum(rounds) == 0সাম্প্রতিক প্রথম রাউন্ড-সর্ব-জিরো পরিবর্তনের জন্য ক্ষতিপূরণ যোগ করা হয়েছে

সম্পাদনা করুন: মন্তব্যে সমস্যাগুলি স্থির হয়েছে, ফাইলের নাম থেকে ইনপুট গ্রহণ করতে সক্ষম করেছে এবং প্রতিযোগিতার পাশাপাশি আগাছা ফেলেছে বলে '2' আর কখনও পছন্দ করে না। অল -0 এর সাথে হয় সূচনা ইনপুট হিসাবে বা ফাইলের কোনও ডেটা নয়

সম্পাদনা 2: একটি মিনিট ভুলে গেছেন ()

edit3: প্রশ্নের ইনপুট প্রয়োজন অনুসারে পরিবর্তন ইনপুট


স্কোরারের সাথে একটি ছোট সমস্যা সৃষ্টি করে - প্রতিটি রাউন্ডের জন্য স্কোর পেতে আমাকে এন্টার টিপতে হবে। আমার 10 রাউন্ড টেস্ট রান করার ক্ষেত্রে খুব বেশি সমস্যা নেই তবে এটি 100 রাউন্ড রানের জন্য ব্যথা হতে পারে।
গ্যারেথ

@ গ্যারেথ, এটিকে ব্যাশ স্ক্রিপ্টে মুড়িয়ে দিন। echo "$@" | python bidding.pyকাজ করা উচিত।
পিটার টেলর

আমি পিটারের পরামর্শ মতো এটি চেষ্টা করেছি, তবে আমি TypeError: unsupported operand type(s) for +: 'int' and 'list'২৩ লাইনের জন্য একটি ত্রুটি পেয়েছি I'm আমি পাইথন ২.6.১ ব্যবহার করছি, সমস্যাটি কি? আমার কি নতুন সংস্করণ দরকার? ব্যাশ স্ক্রিপ্টটি ব্যবহার না করেই আমি একই সমস্যা পেয়েছি।
গ্যারেথ

@ গ্যারেথ কি এটির সাহায্য করবে যদি আমি এটি তৈরি করি তবে ফাইল নাম দিয়ে সিএস.আরজিভি [1] থেকে ইনপুটটি পাইপ করা হয়েছে?
ব্লেজার

@ ব্লাজার আমি নিশ্চিত নই যে সমস্যাটি। আমি আপনার কমান্ড লাইন থেকে প্রোগ্রামটি কল করছি আমি আপনার উদাহরণ প্রার্থনাটি ব্যবহার করে এবং আমার উপরে ত্রুটিটি পেয়েছি। পাইথন ২.6.১ এর সাথে সামঞ্জস্যপূর্ণ এমন কিছু আছে কি?
গ্যারেথ

3

শোয়ারজেনবেক (স্কালা)

object Schwarzenbeck extends App {
  println ((args(0).split('\n')(0).split(' ').length+1)/4+1)
}

শোয়ার্জনবেকের গোল করার কথা নয়। তিনি খুব শীঘ্রই অনুসরণ করা বেকেনবাউয়ারের জন্য পরিষ্কার। :)

এটি ব্যবহার করতে আপনার একটি সংকলক প্রয়োজন এবং এটি সংকলন করুন

scalac Schwarzenbeck.scala 

তারপরে আপনি এটি চালাতে পারেন:

scala Schwarzenbeck 'your ar-
gu-
ment' 

সম্পাদনা করুন: আরও সামঞ্জস্য


1
শোয়ার্জনবেকের গোল করার কথা ছিল না বলে আমি এই
কথাটি

হ্যাঁ, আমার একটি দ্বিধা ছিল: আমি ৩ জন খেলোয়াড়ের একটি লাইন তৈরি করেছিলাম এবং মুলার সর্বাধিক পয়েন্ট অর্জনের প্রত্যাশা করছিলাম, তবে কৌশলগত অবস্থান থেকে শোয়ারজেনবেক চূড়ান্ত প্রতিরক্ষা রেখা চিহ্নিত করেছিলেন। আমার প্রতিরক্ষা লাইনটি গোল করায় ফুটবল রূপক ব্যর্থ হয়েছিল। :)
ব্যবহারকারী অজানা

3

কৌশলবিদ (রুবি)

শত শত সহজ কৌশল প্রয়োগ করে: প্রতিটি রাউন্ডের জন্য, এমন একটিটিকে বেছে নেয় যা সবচেয়ে আগের রাউন্ডে জিততে পারে:

require 'Matrix'
def winner guesses
  g=guesses.sort
  while g[0]&&g[0]==g[1]
    g.shift while g[0]==g[1]
    g.shift
  end
  g[0]
end

def prob g
  prob=[0]*100;best=0;n=g.size*(g[0].size-1)
  g.each{|r|r[1..-1].each{|v|prob[v-1]+=1.0/n}};
  prob.map!{|v|v/n}
end    

def regression x, y, degree
  return y if x.size==1 
  x_data = x.map {|xi| (0..degree).map{|pow| (xi**pow.to_f) }}
  mx = Matrix[*x_data]
  my = Matrix.column_vector y
  begin
    r = ((mx.t * mx).inv * mx.t * my).transpose.to_a[0]
  rescue Exception => e
    r=[0]*degree;r[-1]=y[-1].to_f/(x[-1]**degree)
  end
  r
end

brains=((1..50).map{|w|[proc{|g|w},
    proc{|g|best=0;(p=prob g).each_with_index{|v,i|
      best=i if(v+i/100.0/w)<p[best]};best+1}]}+
  (1..7).map{|w|[proc{|g|p=1; if (g[1]) then h=g[1..-1];x=(1..h.size).to_a
      p=0;regression(x,h.map{|r|winner r},w).each_with_index{|v,i|
      p+=v*(g.size**i)};end;p.to_i},
    proc{|g|b=g[0].size/4;if g[1] then pred=[];h=g[1..-1]
      x=(1..h.size).to_a;h[0].size.times{|i|p=0
      regression(x,h.map{|r|r[i]},w).each_with_index{|v,i|p+=v*((x[-1]+1)**i)}
      pred<<[[p.to_i,1].max,100].min}
      (1..100).each{|i|if !pred.include?(i) then b=i;break;end};end;b}]}+
  (-1..1).map{|w|[proc{|g|r=g[0].size; if g.size>1 then
      f=g[1..-1].flatten;r=(f.inject{|s,v|s+v}/f.size.to_f+w).to_i;end;r},
    proc{|g|r=g[0].size/2; if g.size>1 then
      r=(g[1..-1].inject(0){|s,v|s+winner(v)}/(g.size.to_f-1)+w).to_i;end;r},
    proc{|g|(winner(g[-1])||9)+w}  ]}+
  [proc{|g|b=0;(p=prob g).each_with_index{|v,i|b=i if v<p[b]};b+1}]).flatten

games = ARGV[0].split("\n").map{|l|l.split.map{|v|v.to_i}}
winpct=[0]*brains.size
(games.size-1).times{|round|
  entries=games[round+1].dup
  brains.each_with_index{|b,i|
    entries[0]=pick=[b[games[0..round]],1].max
    winpct[i]+= 1.0/games.size if winner(entries)==pick 
  }
}
best=0;
winpct.each_index{|i|best = i if (winpct[i]>winpct[best])}
puts brains[best][games]

আমি নিশ্চিত না যে ইনপুট ফর্ম্যাটটি সঠিকভাবে পেয়েছি - উইন্ডোতে এটি পরীক্ষার জন্য মাল্টি-লাইন কমান্ড লাইন আর্গুমেন্ট কীভাবে তৈরি করা যায় তা আমি নিশ্চিত নই। (এই পদ্ধতিটি আইডিয়নে কাজ করছে বলে মনে হচ্ছে))


আমি এখনই এটি পরীক্ষা করতে পারছি না, আমি কর্মক্ষেত্রে আছি এবং 9.30 (GMT) এর পরে বাসায় থাকব না। এই এই প্রশ্নটি বহু-লাইন যুক্তিগুলিতে সহায়তা করে?
গ্যারেথ

কেবল এটি পরীক্ষা করা হয়েছে এবং এটি আমাকে একটি ত্রুটি দিচ্ছে - 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এআরজিভি পরিবর্তে ছিল । এই পরিবর্তনটি করার পরে প্রোগ্রামটি 1প্রতিবার অনুমান করে। এটিকে ঠিক করতে আমি কী করতে পারি কোনও ধারণা?
গ্যারেথ

আপনি কি এই লাইনটি শীর্ষে যুক্ত করতে পারেন এবং এটি দ্বিতীয় রাউন্ড ইনপুট দেওয়ার সময় এটি কী মুদ্রণ করে তা বলতে পারেন (তথ্য 2 লাইন): p ARGV.map{|l|l};exit (আপনার রেফারেন্স বা অনুরূপ কোন প্রশ্নের উত্তর আমার কাছে প্রত্যাশিত ইনপুট দেয় বলে মনে হয় না)
অ্যাশেলি

এটি ["1 2\n3 4\n5 6\n1 2"]প্রশ্নের টেস্ট ইনপুটটির জন্য প্রিন্ট করে ।
গ্যারেথ

2

পার্ল

আমি অনুভব করেছি যে আমি সম্ভবত অনিবার্যভাবে প্রবেশ করতে পারি। আরও গুরুতর এন্ট্রি শীঘ্রই আসছে। বোনাস হিসাবে, এই প্রবেশটি কখনই এক-প্রতিযোগিতায় হারাবে না।

print 1

প্রতিটি প্রতিযোগিতা জিততে না। একে অপরের সাথে অন্যের আত্মবিশ্বাসের সাথে এটি টাই হয়ে যাবে
ব্লেজার

না! আমি বিশ্বাস করতে পারি না আমি সেই মামলার কথা ভুলে গেছি! আমি এটা ঠিক করব।
PhiNotPi

আমার এন্ট্রিটি ডিজাইনের কাজ শুরু করার পরে আমার একটি সিদ্ধান্তে হ'ল প্রতিটি বটকে কমপক্ষে 1/1 টি সময় জমা দিতে হবে, যাতে আত্মবিশ্বাসটিকে এড়িয়ে চলা আটকাতে তাদের ন্যায্য অংশীদারিত্ব করতে পারে।
পিটার টেলর

@ পিটার: চিন্তা করবেন না, আমি এটি যত্ন নিয়েছি । :)
ইলমারি করোনেন

2

জাভাস্ক্রিপ্ট (নোড.জেএস)

সর্বশেষ রাউন্ডে সবচেয়ে বেশি জনপ্রিয় যা গণনা করা হয় এবং তার চেয়ে কম বিড করে, 20 এ মোড়ানো এবং প্রথম দফায় 3 টি বিড করা হয়।

var lastRound = /[^\n]+$/.exec(process.argv[2]);
var numbers = {};
var re = /\d+/g;
var match;

while(match = re.exec(lastRound)) {
    numbers[match] = numbers[match] >>> 0 + 1;
}

var maxKey = -1;

for(var i in numbers) {
    if(maxKey === -1 || numbers[i] > numbers[maxKey]) {
        maxKey = i;
    }
}

if(maxKey == 0) {
    // First round. Bid 3.
    console.log(3);
} else if(maxKey == 1) {
    // Bid 20.
    console.log(20);
} else {
    // Bid one less.
    console.log(maxKey - 1);
}

কীভাবে আবেদন করবেন:

node script.js 'the argument'

সর্বাধিক সাম্প্রতিক পরীক্ষা রানের ফলাফলগুলি দেখলে এটি দলিল হিসাবে আচরণ করে না। কোন ধারণা নেই কেন?
পিটার টেলর

1
@ পিটারটেলর আমি ভাবছি এটি প্রথম 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)
গ্যারেথ

2

পাইথন (কপিরাইট)

আরেকটি, এই বার এটি সর্বশেষ বিজয়ীর সঠিক উত্তরটি অনুলিপি করে, যদি সেখানে একটি থাকে। এটি উভয়কেই বিজয়ী করার চেষ্টা এবং অন্যান্য বিডারদের অবরুদ্ধ করার জন্য ডিজাইন করা। বিড 5যদি প্রথম রাউন্ড হয় তবে কোনওভাবে বিজয়ী না থাকলে আগের রাউন্ড থেকে একটি এলোমেলো সংখ্যাকে বিড করুন

content = sys.argv[1].split('\n')
x = map(int, content[-1].split())
y = []
for each in x:
    if x.count(each) == 1:
        y.append(each)
print min(y) if sum(y) > 0 else random.choice(x) if sum(x) > 0 else 5

2

পাইথন (জো)

এটি কোনওভাবেই জয়ের জন্য নকশাকৃত নয়, তবে ভিড়কে কিছু রঙ যুক্ত করতে আমি যাইহোক এটি এখান থেকে ছুঁড়ে দিচ্ছি :) এটি শেষ রাউন্ডের গড় বিড (গড় জো) বলছে। আমার মূল উত্তর হিসাবে একই অনুরোধ জানানো হয়েছে (যা আমি এখন নাম রাখব কারণ মনে হয় যে শীতল বাচ্চারা যা করছে, এবং এটি দুটি আলাদা করতে সহায়তা করে)। যদি শুরু হয়, এটি বিড 10

content = sys.argv[1].split('\n')  
x = map(int, content[-1].split())
print sum(x)/len(x) if sum(x) != 0 else 10

সম্পাদনা: প্রশ্নের ইনপুট পদ্ধতির জন্য উপযুক্ত ইনপুট পদ্ধতি input


2

পাইথন (টোটালবটস)

আমি মনে করি এটি আমার শেষ হবে তবে আমরা দেখতে পাব। প্রতিযোগী বটের সংখ্যা কেবল আউটপুট করে কতগুলি বট রয়েছে তা জানার সুবিধার্থে লাগে, সুতরাং যদি 17 বট হয় (বটের বর্তমান সংখ্যা, এবং এটি একটি) তবে এটি আউটপুট হবে17

content = sys.argv[1].split('\n')
print len(content[-1].split())

2

পার্ল (স্বাস্থ্য পরিদর্শক)

print ((((((2)**(2))*((2)**(2)))/((((2)**(2))*(2))*(2)))+((((2)**(2))*(2))/((2)+((2)*(((((2)**(2))+((2)*(2)))+(((2)*(2))/((2)**(2))))**(((2)/(2))/(2)))))))+((((2)-(2))/((((2)**(2))+(2))*((2)+(2))))*(rand(2))))

আমি বাজি ধরছি আপনি কি অনুমান করতে পারেন এটি কি করে।


2

সি ++ (শিক্ষিত অনুমান)

আমি ইতিমধ্যে ভেবেছিলাম আমি সময়সীমাটি মিস করেছি, তবে এক্সটেনশনের জন্য ধন্যবাদ আমি এখনও আমার এন্ট্রি যুক্ত করতে পারি। এই প্রোগ্রামটি জি ++ সহ সংকলন করে। প্রোগ্রামটি অন্যান্য এন্ট্রিগুলির পরিসংখ্যান অনুমান করার চেষ্টা করে এবং সবচেয়ে ছোটটিকে অন্য কোনও দ্বারা চয়ন করা নাও হতে পারে তা চয়ন করার চেষ্টা করে।

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <deque>
#include <cstdlib>
#include <ctime>
#include <exception>
#include <stdexcept>

typedef std::vector<int> botvec;
typedef std::vector<botvec> scorevec;

// read all the scores from the given string
// note that this only does minimal error checking
// the result is a vector of vector, each entry of which
// represents one round. That is, the vectors in the vector
// correspond to the lines of the command line argument.
scorevec read_past_scores(char const* scoretext)
{
  scorevec past_scores;

  std::istringstream is(scoretext);
  std::string line;

  scorevec::size_type size = 0;

  while (std::getline(is, line))
  {
    past_scores.push_back(botvec());

    std::istringstream ils(line);
    int i;
    while (ils >> i)
      past_scores.back().push_back(i);
    if (size == 0)
      size = past_scores.back().size();
    else if (past_scores.back().size() != size)
      throw std::runtime_error("invalid score format");
  }
  return past_scores;
}

struct counts { int count[100]; };
struct prob { double p[100]; };

int generate_answer(scorevec& past_scores)
{
  int const number_of_players = past_scores.front().size();
  if (past_scores.front().front() == 0) // initial round
    past_scores.pop_back();

  // Pre-fill the counts to get reasonable probabilities also for
  // insufficient statistics (and the statistics *will* be
  // insufficient!). Bias in favour of small numbers.
  counts initial;
  for (int i = 0; i < 100; ++i)
    initial.count[i] =
      i < number_of_players? 100*(number_of_players-i) : 1;

  std::deque<counts> playercounts(number_of_players, initial);

  // add the actual guesses (with a high factor, to give them high
  // weight against the initial counts)
  for (int i = 0; i < past_scores.size(); ++i)
    for (int j = 0; j < number_of_players; ++j)
      playercounts[j].count[past_scores[i][j]-1]+=5000;

  // drop the own guesses
  playercounts.pop_front();

  // calculate the probabilities corresponding to the counts
  std::vector<prob> playerprobabilities(playercounts.size());
  for (int i = 0; i < playercounts.size(); ++i)
  {
    double sum = 0;
    for (int k = 0; k < 100; ++k)
      sum += playercounts[i].count[k];
    for (int k = 0; k < 100; ++k)
      playerprobabilities[i].p[k] = playercounts[i].count[k]/sum;
  }

  // for each selection, estimate the expected number of other players
  // who will bet on it. Return the first one with an expectation
  // below 1.5.
  for (int i = 0; i < 100; ++i)
  {
    double estimate = 0;
    for (int j = 0; j < number_of_players; ++j)
      estimate += playerprobabilities[j].p[i];
    if (estimate < 1.5)
      return i+1;
  }

  // in the unlikely case that such a choice doesn't exist (meaning
  // there are far more than 100 players), just return 100.
  return 100;
}

int main(int argc, char* argv[])
{
  if (argc < 2)
  {
    std::cerr << "Missing score argument!\n";
    return EXIT_FAILURE;
  }

  try
  {
    scorevec past_scores = read_past_scores(argv[1]);

    std::srand(std::time(0));

    std::cout << generate_answer(past_scores) << std::endl;

    return EXIT_SUCCESS;
  }
  catch(std::exception& e)
  {
    std::cerr << e.what() << "\n";
    return EXIT_FAILURE;
  }
  catch(...)
  {
    std::cerr << "Unknown error\n";
    return EXIT_FAILURE;
  }
}

2

পার্ল (বব)

$_=<>;
INPUT:{

tr/ /,/;
@in = eval;
for(1..$#in){
 $bids[$rnum][$in[$_]]++
}
for(0..$#in){
 $tbids[$rnum][$in[$_]]++
}
$rnum++;
$_=<>;
if($_ ne"\n"){redo INPUT}
}

for(0..100){$pre[$_]=0}

blazer: {
for($r=1;$r<$rnum;$r++){
winner: for($pnt=1;$pnt<101;$pnt++){
        if($tbids[$r][$pnt] == 1){
            if($pnt > 2){
                $winnum[$pnt]++;
            $wins++;
            }
        last winner
        }
}
    }
    if($wins==0){
    $pre[3]++;last blazer
    }
}

CC1: for($pnt=1;$pnt<101;$pnt++){
    if($tbids[$rnum-1][$pnt] == 1){
        $pre[$pnt]++;last CC1
    }
}

CC2: for($pnt=1;$pnt<101;$pnt++){
    if($rnum-2<0){$pre[7]++;last CC2}
    if($tbids[$rnum-2][$pnt] == 1){
        $pre[$pnt]++;last CC2
    }
    if($pnt==100){
    $pre[7]++;last CC2
    }
}

one: {
$pre[1]+=2;
}

two: {
$pre[2]+=2;
}

five: {
$pre[5]+=2;
}

eight: {
$pre[8]+=2;
}

fortytwo: {
$pre[42]++;
}

mueller: {
    $a=($#in+2)/4;
    $pre[int$a]++;
}

schwarzenbeck: {
    $a=($#in+2)/4+1;
    $pre[int$a]++;
}

beckenbauer: {
    $a=($#in+2)/4+2;
    $pre[int$a]++;
}

totalbots: {
    $pre[$#in+1]++;
}

joe: {
$sum=0;
    for(1..100){
    $sum+=$_*$tbids[$rnum-1][$_];
}
    $average=$sum/($#in+1);
    if($average==0){$average=10};
    $pre[$average]++;
}

node: {
$max=0;$maxloc=0;
for(1..100){
    if($tbids[$rnum-1][$_]>$max){$max=$tbids[$rnum-1][$_];$maxloc=$_}
}
$maxloc--;
#if($maxloc==0){
$maxloc=20;
#}
if($rnum==1){$maxloc=3}
    $pre[$maxloc]++;
}
choice: for(1..100){
    if($pre[$_]==1){ 
$count++;
    if($count==3){print; last choice}
}
    if($_==100){print"98"}
}

কীভাবে প্রার্থনা করতে হয় তার জন্য "বব" দেখুন।


এটি অনুরোধের জন্য একটি পুনরাবৃত্তিমূলক গাইড ;-)
গ্যারেথ

আসলে যুক্তিগুলির একটি শৃঙ্খল স্থাপন করা হয়েছে: অ্যালিস বর্ণনা করে যে কীভাবে সে ইনপুট নেয়। ইভ উল্লেখ করেছে যে সে এলিসের মতোই ইনপুট নেয়। ইভও উল্লেখ করেছেন যে তিনি ববের মতোই ইনপুট নেন। সুতরাং, বব অ্যালিসের মতো একই ইনপুট ফর্ম্যাটটি নেয় যা বর্ণনা করা হয়েছে।
ফিনোটপিআই

2

পার্ল (এলিস)

$_=<>;
INPUT:{

tr/ /,/;
@in = eval;
for(1..$#in){
 $bids[$rnum][$in[$_]]++
}
for(0..$#in){
 $tbids[$rnum][$in[$_]]++
}
$rnum++;
$_=<>;
if($_ ne"\n"){redo INPUT}
}

for(0..100){$pre[$_]=0}

blazer: {
for($r=1;$r<$rnum;$r++){
winner: for($pnt=1;$pnt<101;$pnt++){
        if($tbids[$r][$pnt] == 1){
            if($pnt > 2){
                $winnum[$pnt]++;
            $wins++;
            }
        last winner
        }
}
    }
    if($wins==0){
    $pre[3]++;last blazer
    }
}

CC1: for($pnt=1;$pnt<101;$pnt++){
    if($tbids[$rnum-1][$pnt] == 1){
        $pre[$pnt]++;last CC1
    }
}

CC2: for($pnt=1;$pnt<101;$pnt++){
    if($rnum-2<0){$pre[7]++;last CC2}
    if($tbids[$rnum-2][$pnt] == 1){
        $pre[$pnt]++;last CC2
    }
    if($pnt==100){
    $pre[7]++;last CC2
    }
}

one: {
$pre[1]+=2;
}

two: {
$pre[2]+=2;
}

five: {
$pre[5]+=2;
}

eight: {
$pre[8]+=2;
}

fortytwo: {
$pre[42]++;
}

mueller: {
    $a=($#in+2)/4;
    $pre[int$a]++;
}

schwarzenbeck: {
    $a=($#in+2)/4+1;
    $pre[int$a]++;
}

beckenbauer: {
    $a=($#in+2)/4+2;
    $pre[int$a]++;
}

totalbots: {
    $pre[$#in+1]++;
}

joe: {
$sum=0;
    for(1..100){
    $sum+=$_*$tbids[$rnum-1][$_];
}
    $average=$sum/($#in+1);
    if($average==0){$average=10};
    $pre[$average]++;
}

node: {
$max=0;$maxloc=0;
for(1..100){
    if($tbids[$rnum-1][$_]>$max){$max=$tbids[$rnum-1][$_];$maxloc=$_}
}
$maxloc--;
#if($maxloc==0){
$maxloc=20;
#}
if($rnum==1){$maxloc=3}
    $pre[$maxloc]++;
}
choice: for(1..100){
    if($pre[$_]==1){ 
$count++;
    if($count==2){print; last choice}
}
    if($_==100){print"99"}
}

আমার অন্যান্য বটের মতোই ইনপুট নেয়।

perl Alice.plx
1 4 3 12
3 2 4 11
[blank line]

2

পার্ল (ইভ)

আমার অন্যান্য বটগুলির পথ প্রশস্ত করতে সহায়তা করার জন্য আমি এই এন্ট্রিটিকে পুরোপুরি পুনরায় পাঠিয়েছি।

$_=<>;
INPUT:{

tr/ /,/;
@in = eval;
for(1..$#in){
 $bids[$rnum][$in[$_]]++
}
for(0..$#in){
 $tbids[$rnum][$in[$_]]++
}
$rnum++;
$_=<>;
if($_ ne"\n"){redo INPUT}
}

for(0..100){$pre[$_]=0}

blazer: {
for($r=1;$r<$rnum;$r++){
winner: for($pnt=1;$pnt<101;$pnt++){
        if($tbids[$r][$pnt] == 1){
            if($pnt > 2){
                $winnum[$pnt]++;
            $wins++;
            }
        last winner
        }
}
    }
    if($wins==0){
    $pre[3]++;last blazer
    }
}

CC1: for($pnt=1;$pnt<101;$pnt++){
    if($tbids[$rnum-1][$pnt] == 1){
        $pre[$pnt]++;last CC1
    }
}

CC2: for($pnt=1;$pnt<101;$pnt++){
    if($rnum-2<0){$pre[7]++;last CC2}
    if($tbids[$rnum-2][$pnt] == 1){
        $pre[$pnt]++;last CC2
    }
    if($pnt==100){
    $pre[7]++;last CC2
    }
}

one: {
$pre[1]+=2;
}

two: {
$pre[2]+=2;
}

five: {
$pre[5]+=2;
}

eight: {
$pre[8]+=2;
}

fortytwo: {
$pre[42]++;
}

mueller: {
    $a=($#in+2)/4;
    $pre[int$a]++;
}

schwarzenbeck: {
    $a=($#in+2)/4+1;
    $pre[int$a]++;
}

beckenbauer: {
    $a=($#in+2)/4+2;
    $pre[int$a]++;
}

totalbots: {
    $pre[$#in+1]++;
}

joe: {
$sum=0;
    for(1..100){
    $sum+=$_*$tbids[$rnum-1][$_];
}
    $average=$sum/($#in+1);
    if($average==0){$average=10};
    $pre[$average]++;
}

node: {
$max=0;$maxloc=0;
for(1..100){
    if($tbids[$rnum-1][$_]>$max){$max=$tbids[$rnum-1][$_];$maxloc=$_}
}
$maxloc--;
#if($maxloc==0){
$maxloc=20;
#}
if($rnum==1){$maxloc=3}
    $pre[$maxloc]++;
}
choice: for(1..100){
    if($pre[$_]==1){ 
$count++;
    if($count==1){print; last choice}
}
    if($_==100){print"100"}
}

একটি ইনপুট ফর্ম্যাট নেয়: "বব" এবং "এলিস" এর মতো।


1

Brainfuck

চ্যালেঞ্জ থেকে উদ্ধৃত:

"আপনি যতটা বট চান তার মধ্যে প্রবেশ করতে পারেন, সুতরাং কেউ যদি কেবল অনুমান করে এমন একটি বট 1প্রবেশ করে, তবে আপনি এটির অনর্থক রেন্ডার করতে একই রকম অন্য একটি প্রবেশ করতে পারেন" "

ঠিক আছে, যেহেতু ফিনোটপি একটিতে প্রবেশ করেছে, তাই আমাকে অন্যটিতে প্রবেশ করতে দিন। কেবল আলাদা হতে, আমি এটি ব্রেইনফাক এ করব:

+++[->++++<]>[-<++++>]<+.

অবশ্যই, এখন যে 1 বাজি দেওয়া সম্ভবপর কৌশল নয়, এখন করার স্পষ্ট বিষয় হ'ল পরিবর্তে 2 বাজি দেওয়া ...

সম্পাদনা: প্রতিটি মন্তব্যে উত্তর দুটি ভাগ করুন, দুটি প্রোগ্রামকে আরও আকর্ষণীয় ভাষায় নতুন করে লিখুন।


প্রথমত, দয়া করে প্রতিটি উত্তরে একটি প্রবেশ করুন। দ্বিতীয়ত, আমি জানি যে কেউ হারানোর হারের নিশ্চয়তা দিতে 1 থেকে 100 পর্যন্ত প্রতিটি অঙ্কের প্রতিটি মুদ্রণের 100 টি পোস্ট করতে পারে - সমানভাবে অন্য কেউ ঠিক একই অর্থ করতে পারে যে কেউ জিতবে না। ফুটবলের একটি খেলায় (সকার) সমস্ত 11 খেলোয়াড় লক্ষ্য রেখায় দাঁড়াতে পারে যে গ্যারান্টি দেয় যে অন্য দলটি স্কোর না করে। এটি সাধারণত কখনই সেভাবে ঘটে না কারণ এটি যদি এমন হয় তবে এটি অনেকটা গেম হবে?
গ্যারেথ

তৃতীয়ত, এই আপত্তিটি সত্যিই স্যান্ডবক্সে উত্থাপন করা উচিত ছিল - সর্বোপরি এর উদ্দেশ্য এটিই।
গ্যারেথ

@ গ্যারেথ: ঠিক আছে, আমি উত্তরটি দুটি ভাগে ভাগ করেছি। এন্ট্রিগুলির যুক্তিসঙ্গততা হিসাবে, আপনি নিজেই পরামর্শ দিয়েছিলেন যে, যদি কেউ "ব্যক্তি-কনফিডেন্ট" জমা দেয় তবে অন্য কেউ এটির মোকাবেলায় একই কাজ করতে পারে। এই মুহুর্তে, অবশ্যই "দ্বিগুণ কনফিডেন্ট" জমা দেওয়া ঠিক ততটাই অর্থবোধ করে যে "থিওর কনফিডেন্ট" প্রথম স্থানে ছিল, তাই ...
ইলমারি করোনেন

1
এটি সম্পর্কে পরিষ্কার জিনিসটি হ'ল এখন আমি এই প্রবেশটি জিততে না দিয়ে আমার আত্মবিশ্বাসের প্রবেশটি মুছতে পারি না।
ফিনোটপিপি

1
@ পিটার: কেন এমন ভাবছেন? প্রদত্ত উভয় খনি এবং PhiNotPi এর প্রোগ্রাম রেসে আছে, সেখানে অন্য কারো একটি প্রোগ্রাম যা জমা দিতে করার কোনো কারণ কি কখনো কয়টা বেট 1 (যদি তারা চান জয় যে প্রোগ্রাম হলো,)।
ইলমারি করোনেন

1

মুয়েলার (স্কেলা)

object Mueller extends App {
  println ((args(0).split('\n')(0).split(' ').length+1)/4)
}

আপনি যদি শোয়ারজেনবেক এবং বেকেনবাউরকে চেনেন, আপনি অবশ্যই মোলারের আশা করেছিলেন। সে এখানে. তিনি বেকেনবাউর এবং শোয়ারজেনবেকের কাছ থেকে অনেক উপকৃত হবেন এবং তার জয়ের কথা রয়েছে।

চলমান এবং সংকলন সম্পর্কে বিশদ: শোয়ারজেনবেক দেখুন

এখন লক্ষ্য, কাছাকাছি।


1

বেকেনবাউয়ার (স্কেলা)

object Beckenbauer extends App {
  println ((args(0).split('\n')(0).split(' ').length+1)/4+2)
}

শোয়ারজেনবেকের সহায়তায় বেকেনবাওয়ার কিছু গোল করার কথা রয়েছে। শোয়ারজেনবেক ছাড়া তিনি কিছুই নন।

চলমান এবং সংকলন সম্পর্কে বিশদ: [শোয়ারজেনবেক] দেখুন [1]

সম্পাদনা: এখন ঘরে আরও গভীরভাবে বাজানো।


1

ব্যাচের স্ক্রিপ্টিং

echo 5

আমার জমা, প্রতিবার তার উত্তর হিসাবে 5 দেয় ;-)


1

Eight.bat

echo 8

আর একটি সহজ উত্তর, প্রতিবার 8 দেয়।


1

ফাইভসনসেল (পিএইচপি)

মেলামোকব এর "সর্বদা 5" সমাধান বাতিল করে।

5

1

EightsCancel (পিএইচপি)

মেলামোকব এর "সর্বদা 8" সমাধান বাতিল করে। দুঃখিত, মেলামোকব!

8

এখানে আমরা আবার যাই, প্রতিযোগিতা: পি
মেল্লামোকব

1

পাইথন 2.7 - কপির্যাট 2

দ্বিতীয় রাউন্ডের বিজয়ী অনুলিপি করে । ওহ না! অন্যথায় আউটপুট 7।

import sys
content = sys.argv[1].split('\n')
x = map(int, content[-2].split()) if len(content) > 1 else [7]
y = []
for each in x:
    if x.count(each) == 1:
        y.append(each)
print min(y) if sum(y) > 0 else random.choice(x) if sum(x) > 0 else 7

1

শেল লিপি (গভীর চিন্তা)

ঠিক আছে, যাতে আমি সামান্য দ্বিতীয় সুযোগ পাই, এখানে আরও একটি এন্ট্রি রয়েছে, এবার একটি শেল স্ক্রিপ্ট (কোনও শেল দিয়ে কাজ করা উচিত)। এটি সর্বদা জীবন, মহাবিশ্ব এবং সমস্ত কিছুর প্রশ্নের উত্তর দেয়।

echo 42

আসলে এই অ্যালগরিদম পুরোপুরি সঠিক নয় কারণ আমি 7.5 মিলিয়ন বছরের বিলম্ব বাদ দিয়েছি। :-)


আজ রাতের পরীক্ষার জন্য খুব দেরি দুঃখিত, তবে আমি সকালে আরও একটি করব।
গ্যারেথ

1

dirichlet.c

#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>

main(int argc, char* argv[])
{
    int handle;
    char *str;
    int32_t bits, val, n = 0;

    if (argc) {
        for (str = argv[1]; *str; str++)
            if (*str == 32) n++;
            else if (*str == 10) break;
    }

    n /= 2;
    if (n > 99) n = 99;

    handle = open("/dev/urandom", O_RDONLY);
    do {
        read(handle, &bits, sizeof bits);
        bits &= 0x7fffffff;
        val = bits % n;
    } while (bits - val + (n-1) < 0);
    close(handle);

    printf("%d", 2 + val);
}

আমি মনে করি এটি ব্যবহার করার জন্য এলোমেলো বিটগুলির মধ্যে দিয়ে যায় /dev/random , তবে আমি পছন্দ করি। যদি কেউ উইন্ডোজে এটি পরীক্ষা করতে চান তবে আপনাকে নিজের পোর্ট করতে হবে, কারণ আমার কাছে সি সংকলকযুক্ত উইন্ডোজ বাক্সে অ্যাক্সেস নেই।

যুক্তিসহ ব্যাখ্যা

টুর্নামেন্টটি শেষ হওয়ার আগে আমি এর পিছনে যুক্তিটি ব্যাখ্যা করতে চাইনি, তবে এখন যে বিজয়ীর নাম ঘোষণা করা হয়েছে, আমি মনে করি এটি সময় হয়ে গেছে।

পায়রা-গহ্বর নীতি অনুযায়ী (Dirichlet এর নীতি, অত: পর বট নামে ওরফে), যদি আছে এন প্রতিদ্বন্দ্বী বট তারপর একটি সংখ্যা W এ [1..1 + + এন / 2] যা পারেন Won অথবা যদি টস হবে নির্বাচন করেছেন। তাই আমি উপসংহারে পৌঁছেছি যে অনুকূল কৌশলটি 1+ N / 2 এর চেয়ে বেশি সংখ্যা নির্বাচন করবে না । তবে এন সমান হলে , 1+ এন / 2 নির্বাচন করা একটি ছোট উইনিং স্লট তৈরি করে। সুতরাং যে স্লটগুলি বেছে নেওয়ার উপযুক্ত তা হ'ল [1 .. ( এন।) +1) / 2]।

এটি কীভাবে একটি স্লট নির্বাচন করবেন সে প্রশ্নটি ছেড়ে দেয়। অল্প সংখ্যক বটের জন্য আমি যাচাই করেছি যে প্রতি বট প্রার্থীদের মধ্যে সমানভাবে নির্বাচন করলে একটি ন্যাশ ভারসাম্য রয়েছে এবং আমি দৃ strongly়ভাবে সন্দেহ করি যে এটি সত্য হতে থাকবে।

তাত্ত্বিক দিক থেকে এই বটের কৌশলটিতে সামান্য বিচ্যুতি হ'ল সহজভাবে মেটাগেমিং।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.