মন্দ বনাম ভাল


112

ফলাফল - 19 জুলাই, 2014

পার্বত্য বর্তমান রাজা ভাড়াটে ব্যবহারকারী দ্বারা Fabigler ! এন্ট্রি জমা দিন এবং তাকে তাঁর সিংহাসন থেকে ছিটকে দিন!

স্কোরবোর্ড দেখতে এখানে ক্লিক করুন।

জুলাই 19, 2014 বা তার আগে জমা দেওয়া প্রোগ্রামগুলি অন্তর্ভুক্ত ছিল। অন্যান্য সমস্ত জমা ভবিষ্যতের বিচারে অন্তর্ভুক্ত করা হবে। নতুন ফলাফলগুলি আগস্ট 9 এর দিকে পোস্ট করা উচিত, যাতে আপনাকে প্রচুর সময় দেয়।


ভাই আঁকানো দৃষ্টান্ত ক্রিস রেইনবোল্ট দ্বারা চিত্রিত, আমার ভাই এবং স্যাভানা কলেজ অফ আর্ট অ্যান্ড ডিজাইনের স্নাতক

ভূমিকা

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

খেলাাটি

প্রতিটি ট্রায়াল, আপনি ছদ্মবেশীভাবে জোড় করা হবে এবং তারপরে 20 এবং 30 এর মধ্যে অন্য জমা দিয়ে sh প্রতিটি পরীক্ষায় 1000 টি রাউন্ড থাকে। প্রতিটি রাউন্ডে, আপনাকে একটি ইনপুট পাস করা হবে এবং আউটপুট উত্পাদনের আশা করা হবে। আপনার আউটপুট রেকর্ড এবং স্কোর করা হবে। এই প্রক্রিয়াটি 1000 বার পুনরাবৃত্তি হবে।

ইনপুট

আপনি একক যুক্তি পাবেন যা প্রতিটি খেলোয়াড়ের অতীত ভোটের প্রতিনিধিত্ব করে। গোলগুলি কমা দ্বারা সীমিত করা হয়। এ 0এমন একজন খেলোয়াড়কে প্রতিনিধিত্ব করে যিনি round রাউন্ডের বিপক্ষে ছিলেন with এ 1এমন কোনও খেলোয়াড়কে উপস্থাপন করে যিনি গুডের পক্ষে ছিলেন। একটি পরীক্ষার মধ্যে, খেলোয়াড়রা সর্বদা একই ক্রমে থাকবে। আপনার নিজের ভোট অন্তর্ভুক্ত করা হবে, কিন্তু স্পষ্টভাবে চিহ্নিত করা হবে না। উদাহরণ স্বরূপ:

101.100.100

এই উদাহরণে, তিনটি রাউন্ড সমাপ্ত হয়েছে এবং তিনজন খেলোয়াড় প্রতিযোগিতা করছেন। খেলোয়াড় সর্বদা ভাল দিক দিয়ে। খেলোয়াড় দুজন সর্বদা Evভিলের সাথে থাকে। খেলোয়াড় তিনটি গুড থেকে রাউন্ড 1 এভিল থেকে 2 এবং 3 রাউন্ডে পরিবর্তিত হয়েছিল those এই খেলোয়াড়ের একজন আপনি ছিলেন One

আউটপুট

জাভা সাবমিশন

  • goodগুডের পাশে থাকতে চাইলে স্ট্রিংটি ফিরুন ।
  • evilআপনি যদি এভিলের সাথে থাকতে চান তবে স্ট্রিংটি ফিরুন ।

নন-জাভা সাবমিশন

  • ভাল লাগাতে চাইলে স্ট্রিংটিকে goodস্টডআউটে আউটপুট দিন ।
  • evilআপনি যদি এভিলের সাথে থাকতে চান তবে স্ট্রিংটিকে স্টডআউটে আউটপুট দিন ।

যদি আপনার প্রোগ্রামটি আউটপুট দেয় বা অন্য কিছু দেয়, একটি ব্যতিক্রম ছুঁড়ে, সংকলন করে না, বা এই সঠিক মেশিনে কিছু আউটপুট তুলতে এক সেকেন্ডের চেয়ে বেশি সময় নেয় , তবে এটি অযোগ্য হয়ে যাবে।

স্কোরিং

স্কোরগুলি সহজেই দেখার জন্য একটি গুগল ডক্স স্প্রেডশিটে পোস্ট করা হবে যত তাড়াতাড়ি আমি বর্তমান সমস্ত এন্ট্রিগুলি সংকলন করতে পারি। চিন্তা করবেন না - যতক্ষণ না আপনি লোকেরা প্রোগ্রাম জমা দিন ততক্ষণ আমি ট্রায়াল চালিয়ে যাব!

  • আপনি একটি রাউন্ডের সময় সংখ্যাগরিষ্ঠের পক্ষে সাইডিংয়ের জন্য 3 পয়েন্ট পাবেন।
  • আপনি একটি রাউন্ডের সময় সংখ্যালঘুটির পক্ষে পার হওয়ার জন্য এন - ১ পয়েন্ট পাবেন, যেখানে n আপনি সংখ্যালঘুটির সাথে একটানা বার সংখ্যার পক্ষে ছিলেন।

আপনার স্কোরটি 5 টি পরীক্ষার মধ্যম হবে। প্রতিটি পরীক্ষায় 1000 রাউন্ড থাকে।

deliverables

নন-জাভা সাবমিশন

আপনাকে অবশ্যই একটি অনন্য শিরোনাম, একটি প্রোগ্রাম এবং একটি উইন্ডোজ কমান্ড লাইন স্ট্রিং জমা দিতে হবে যা আপনার প্রোগ্রামটি চালাবে। মনে রাখবেন যে আর্গুমেন্ট সেই স্ট্রিংয়ের সাথে যুক্ত হতে পারে। উদাহরণ স্বরূপ:

  • python Angel.py
    • মনে রাখবেন যে এটির কোনও আরগস নেই। এই এক গোল! এই জন্য প্রস্তুত থাকুন।
  • python Angel.py 11011,00101,11101,11111,00001,11001,11001

জাভা সাবমিশন

আপনাকে অবশ্যই একটি অনন্য শিরোনাম এবং একটি জাভা ক্লাস জমা দিতে হবে যা নীচে লিখিত বিমূর্ত মানব শ্রেণিকে প্রসারিত করবে।

public abstract class Human {
    public abstract String takeSides(String history) throws Exception;
}

পরীক্ষামূলক

আপনি যদি আপনার নিজের জমা পরীক্ষা করতে চান তবে এখানে নির্দেশাবলী অনুসরণ করুন

অতিরিক্ত নোট

আপনি চান হিসাবে বিভিন্ন বিভিন্ন জমা জমা দিতে পারেন। কলমিং বলে মনে হচ্ছে এমন জমাগুলি অযোগ্য ঘোষণা করা হবে। এই চ্যালেঞ্জটির লেখকই সেই বিষয়ে একমাত্র বিচারক হবেন।

আপনার প্রোগ্রাম বা জাভা শ্রেণীর একটি নতুন উদাহরণ তৈরি করা হবে যতবার তা বলা হবে। আপনি একটি ফাইল লিখিত তথ্য অবিরত থাকতে পারে। আপনি নিজের শ্রেণি ব্যতীত কোনও কিছুর কাঠামো বা আচরণ পরিবর্তন করতে পারবেন না।

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


2
মন্তব্যগুলি মুছে ফেলা হয়েছে, কারণ তারা অপ্রচলিত ছিল এবং ওপির অনুরোধে। মুছে ফেলা দরকার এমন কোনও মন্তব্য সম্পর্কে আমাকে জানান।
ডোরকনবব

7
ওহ, ওপি তার ব্যবহারকারীর নাম পরিবর্তন করে। ঠিক আছে, তাহলে ফলাফল কখন প্রদর্শিত হবে?
Justhalf

6
@ রেনবোল্ট এটি অবশ্যই একটি চাকরীর নরক হতে হবে, এই চ্যালেঞ্জটি চালাচ্ছে! এই পরিমাণ মনোযোগ দেওয়ার কারণ হ'ল প্রোটোকল এবং নিয়মের সরলতা, এটিকে সহজ, কার্যকারী এন্ট্রিগুলিকে অনুমতি দেওয়ার সময় অ্যাক্সেসযোগ্য করে তোলে । টিএল; ডিআর: আপনার চ্যালেঞ্জটি খুব ভাল! : ডি
টমসমেডিং

3
@ ডিগেল আমি কাঁচা ডেটা, উপরের, নিম্ন, গড় এবং সম্ভবত একটি লাইন চার্ট পোস্ট করব যাতে প্রতিযোগিতাটি টেনে নেওয়ার সাথে সাথে কে আরও ভাল করেছে তা আমরা দেখতে পারি।
রেইনবোল্ট

6
এর মধ্যে একটি পোড 10 টি এন্ট্রি দিয়ে শেষ হয়েছিল যা প্রতি একক সময় একই ভাবে ভোট দিয়েছে। ফলস্বরূপ, দুই ব্যবহারকারী প্রায় 450,000 এর স্কোর নিখুঁত বা "নিখুঁত এক রাউন্ড সংক্ষিপ্ত" দিয়ে শেষ করেছেন। একই পরীক্ষাগুলি অন্যান্য পরীক্ষায় প্রায় 1900 রান করেছিল scored গড় স্কোর 2000 এর কাছাকাছি results ফলাফলগুলিতে চূড়ান্ত ভারসাম্যহীনতার কারণে, আমি স্থির করেছিলাম যে আরও অর্থবহ সংখ্যাটি একটি মিডিয়ান হবে। আমি চ্যালেঞ্জটি সম্পাদনা করেছি যাতে 5 টি পরীক্ষার পরে, বিজয়ী সর্বোচ্চ মধ্যস্থতার সাথে জমা হবে। যদি কেউ মনে করেন যে মিডিয়ান থেকে মিডিয়ান দিকে যাওয়া অন্যায্য বা অন্যথায় একটি খারাপ পছন্দ, দয়া করে মন্তব্য করুন।
রেনবোল্ট

উত্তর:


11

ভাড়াটে

সর্বশেষে যিনি সর্বাধিক অর্থ প্রদান করেছেন তার পক্ষে সর্বদা পাশে থাকুন sides

অ্যাকাউন্টে নেওয়া ভাল লোকেরা পরিসংখ্যানগতভাবে আরও বেশি উপার্জন করে।

package Humans;
public class Mercenary extends Human {
    public String takeSides(String history) {
        // first round random!
        if (history.length() == 0) {
            return Math.random() >= 0.5 ? "good" : "evil";
        }

        String[] rounds = history.split(",");
        String lastRound = rounds[rounds.length - 1];

        double goodMoneyPaid = 0;
        double evilMoneyPaid = 0;
        for (char c : lastRound.toCharArray()) {
                switch (c) {
                case '0':
                    goodMoneyPaid = goodMoneyPaid + 0.2; //statistically proven: good people have more reliable incomes
                    break;
                case '1':
                    evilMoneyPaid++; 
                    break;
                default:
                    break;
                }
        }

        if (goodMoneyPaid > evilMoneyPaid)
        {
            return "good";
        } else {
            return "evil";
        }
    }
}

2
অর্থ সম্পর্কে কিছু বলতে এটি দ্বিতীয় পোস্ট । আমি কি রেফারেন্স মিস করছি নাকি কিছু?
রেইনবোল্ট

সত্য, তবে এই লোকটি আরও বেশি দুষ্টু জারজ। কেবলমাত্র অর্থের খাতিরে প্রতি পালা করে তার বন্ধুবান্ধবকে ত্যাগ করা।
ফেবিগলার 21

আপনার স্যুইচ বিবৃতিটি ডিফল্ট কেসটির জন্য একটি রিটার্ন বিবৃতি হারিয়েছে, এটি সংকলন না করার কারণে causing আমি এলোমেলো একটি যুক্ত করেছি।
রেনবোল্ট

4
অভিনন্দন, পাহাড়ের রাজা! আমি বুঝতে পারছি না যে এই এন্ট্রিটি কীভাবে জিতল। একটি ব্যাখ্যা যুক্ত করার জন্য যত্নশীল, এখন এটির সাথে এটি 300 খ্যাতিযুক্ত অনুগ্রহটি যুক্ত হয়েছে?
রেনবোল্ট

4
সম্ভবত কোনও ত্রুটি, বা আমি মন্তব্য এবং বর্ণনাটি ভুল বুঝেছি, তবে ভাড়াটে আসলে যা করতে চেয়েছিল তা করে না। প্রথম এলোমেলো রাউন্ড ব্যতীত, তিনি সর্বদা অশুভের পক্ষে থাকবেন যদি না পূর্ববর্তী রাউন্ডের ১/ than জন লোক খারাপের পক্ষে ভোট না দেয়।
জায়েবজ

39

হিপস্টার, রুবি

if ARGV.length == 0
    puts ["good", "evil"].sample
else
    last_round = ARGV[0].split(',').last
    n_players = last_round.length
    puts last_round.count('1') > n_players/2 ? "evil" : "good"
end

কেবল সর্বশেষ রাউন্ডের সংখ্যালঘুতে চলে যায়, কারণ সমস্ত কিছু মূলধারার।

মত দৌড়াও

ruby hipster.rb

30

পাইটিয়ার বেলিশ

আপনি কখনই জানেন না যে পাইটিয়ার বেলিশ কার দিকে রয়েছে।

package Humans;

/**
 * Always keep your foes confused. If they are never certain who you are or 
 * what you want, they cannot know what you are likely to do next.
 * @author Rusher
 */
public class PetyrBaelish extends Human {

    /**
     * Randomly take the side of good or evil.
     * @param history The past votes of every player
     * @return A String "good" or "evil
     */
    public String takeSides(String history) {
        return Math.random() < 0.5 ? "good" : "evil";
    }
}

খেলোয়াড় সংখ্যা সমান হলে এই এন্ট্রিটি অন্তর্ভুক্ত করা হবে। এটি নিশ্চিত করে যে সর্বদা সংখ্যাগরিষ্ঠ থাকবে।


28
স্পষ্টতই পাইটিয়ার বেলিশের পক্ষে।
চতুহুল

2
@ কেভিন এটি ধারাবাহিকভাবে বেশিরভাগ বটগুলিকে পরাজিত করে। এটি সাধারণত 27 স্কোর করে।
সিজেফুরে

3
@ কেভিন এই এন্ট্রিটি চ্যালেঞ্জের লেখক দ্বারা জমা দেওয়া হয়েছিল। এটি ভাল করার জন্য বোঝানো হয়নি। এটি সর্বদা সংখ্যাগরিষ্ঠ থাকবে তা নিশ্চিত করার জন্য এটি বিদ্যমান, কারণ এমনকি সমান সংখ্যক খেলোয়াড়ের সাথে একটি টাই হতে পারে।
রেনবোল্ট

4
ওহ Godশ্বর কেন এটাই সবচেয়ে বেশি ভোট পেয়েছে? এটা ঠিক ন্যায্য নয়
20:25 এ টমসডিং

3
@ টমসডিং নং। এটি গেম অফ থ্রোনস লোলের একটি উদ্ধৃতি।
রেনবোল্ট

29

সি ++, মেটা সায়েন্টিস্ট

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

#include <iostream>
#include <utility>
#include <cstdlib>
#include <cstring>
#if 0
#define DBG(st) {st}
#else
#define DBG(st)
#endif

#define WINDOW (200)

using namespace std;

int main(int argc,char **argv){
    if(argc==1){
        cout<<(rand()%2?"good":"evil")<<endl;
        return 0;
    }
    DBG(cerr<<"WINDOW="<<WINDOW<<endl;)
    int nump,numr;
    nump=strchr(argv[1],',')-argv[1];
    numr=(strlen(argv[1])+1)/(nump+1);
    int period,r,p;
    int score,*scores=new int[WINDOW];
    int max; //some score will always get above 0, because if some score<0, the inverted wave will be >0.
    int phase,phasemax;
    int predicted=0; //The predicted number of goods for the next round
    int fromround=numr-WINDOW;
    if(fromround<0)fromround=0;
    pair<int,int> maxat; //period, phase
    DBG(cerr<<"Players:"<<endl;)
    for(p=0;p<nump;p++){
        DBG(cerr<<" p"<<p<<": ";)
        for(r=fromround;r<numr;r++)if(argv[1][r*(nump+1)+p]!=argv[1][p])break;
        if(r==numr){
            DBG(cerr<<"All equal! prediction="<<argv[1][p]<<endl;)
            predicted+=argv[1][(numr-1)*(nump+1)+p]-'0';
            continue;
        }
        max=0;
        maxat={-1,-1};
        for(period=1;period<=WINDOW;period++){
            scores[period-1]=0;
            phasemax=-1;
            for(phase=0;phase<2*period;phase++){
                score=0;
                for(r=fromround;r<numr;r++){
                    if(argv[1][r*(nump+1)+p]-'0'==1-(r+phase)%(2*period)/period)score++;
                    else score--;
                }
                if(score>scores[period-1]){
                    scores[period-1]=score;
                    phasemax=phase;
                }
            }
            if(scores[period-1]>max){
                max=scores[period-1];
                maxat.first=period;
                maxat.second=phasemax;
            }
            DBG(cerr<<scores[period-1]<<" ";)
        }
        DBG(cerr<<"(max="<<max<<" at {"<<maxat.first<<","<<maxat.second<<"})"<<endl;)
        DBG(cerr<<"     prediction: 1-("<<numr<<"+"<<maxat.second<<")%(2*"<<maxat.first<<")/"<<maxat.first<<"="<<(1-(numr+maxat.second)%(2*maxat.first)/maxat.first)<<endl;)
        predicted+=(1-(numr+maxat.second)%(2*maxat.first)/maxat.first);
    }
    DBG(cerr<<"Predicted outcome: "<<predicted<<" good + "<<(nump-predicted)<<" evil"<<endl;)
    if(predicted>nump/2)cout<<"evil"<<endl; //pick minority
    else cout<<"good"<<endl;
    delete[] scores;
    return 0;
}

আপনি ডিবাগ বিবৃতি চালু করতে চান, লাইন পড়া পরিবর্তন #if 0করতে #if 1

সংকলন করুন g++ -O3 -std=c++0x -o MetaScientist MetaScientist.cpp(আপনার সতর্কতার দরকার নেই, তাই না -Wall) এবং সাথে চালনা করুন MetaScientist.exe(সম্ভবত অবশ্যই যুক্তি সহ)। আপনি যদি সত্যিই সুন্দর জিজ্ঞাসা করেন তবে আমি আপনাকে উইন্ডোজ এক্সিকিউটেবল সরবরাহ করতে পারি।

সম্পাদনা: স্পষ্টতই, পূর্ববর্তী সংস্করণটি গেমটিতে প্রায় 600 রাউন্ডের বাইরে চলে গেছে। এটি করা উচিত নয়। এর সময় খরচ #define WINDOW (...)লাইন দ্বারা নিয়ন্ত্রিত হয় , আরও ধীর হয় তবে আরও পিছনে ফিরে দেখায়।


2
আমি বিনীতভাবে পরামর্শ দিচ্ছি আপনি হারানোর দিকটি বেছে নেওয়ার চেষ্টা করুন। আপনি যদি ধারাবাহিকভাবে সঠিকভাবে অনুমান করতে পারেন তবে আপনি প্রতি রাউন্ডে 3 টিরও বেশি পয়েন্ট পাবেন।
কেভিন

1
@ কেভিন এটি সত্য, তবে আমি বুঝতে পেরেছিলাম যে এটি সম্ভবত খুব দ্রুত ভুল দিকটি অনুমান করতে পারে এবং সর্বদা সংখ্যাগরিষ্ঠর অধিকার অর্জনের ক্ষেত্রে উন্নতি পেতে আপনার হারের দিকটি টানা সাতবারের চেয়ে সঠিকভাবে অনুমান করা উচিত। আমি যদিও এটি পরিবর্তন করতে পারেন।
টমসডিং

1
@ কেভিন এছাড়াও, আমি প্রথমে দেখতে চাই যে কীভাবে এটি করা হয় (বিজ্ঞানী এবং মেটা সায়েন্টিস্ট) যখন রুশার এই সপ্তাহান্তে আমাদের স্কোরবোর্ড পেয়েছে, যেমন তিনি ওপিকে দেওয়া মন্তব্যে নির্দেশ করেছেন। রুশার, দুঃখিত, তবে আমি নিজে নিজে সমস্ত জিনিসপত্র সংকলন করতে খুব অলস ... :)
টমসডিং

3
কোন চিন্তা করো না! এগুলি যাইহোক চালানো সম্ভবত নিরাপদ নয়। শুধু আমাকে ইন্টারনেটে 50 জন অপরিচিত দ্বারা লিখিত কোড দিয়ে আমার মেশিনটি স্ক্রু আপ করতে দিন।
রেনবোল্ট

1
@ কেভিন তবে এটি অনেক বেশি ! আমি সত্যিই পারি, তবে আমি এটি পছন্দ করি না। আমি এই ভাড়া কি দেখতে পাবেন।
টমসডিং

26

ফেরেশতা

সবার খাঁটি খেলোয়াড়।

কার্যক্রম

print "good"

হুকুম

python Angel.py

22
পাইথন একটি ভাল ভাষা। এঞ্জেলটি এটি ব্যবহার করা উচিত এটি স্বাভাবিক seems
jpmc26

23
আমি মানুষকে মনে করিয়ে দিতে পারি যে পাইথন একটি সাপ। একটি সর্প।
মিস্টার লিস্টার

3
@ মিঃলিস্টার আমি কি আপনাকে মনে করিয়ে দিতে পারি যে himশ্বর তাকে বেহেশত থেকে বের করে দেওয়ার আগে লুসিফার একজন মহান দেবদূত ছিলেন?
জিববোজ

1
@ জিববোজ হ্যাঁ ... সত্যিই লজ্জাজনক যে তারা পড়ে গিয়েছিল। তারা একসাথে অনেক কিছু অর্জন করতে পারত।
মিস্টার লিস্টার

24

আর্টেমিস ফাউল

package Humans;

public class ArtemisFowl extends Human {
    public final String takeSides(String history) {
        int good = 0, evil = 0;
        for(int i = 0; i < history.length(); i++)   {
            switch(history.charAt(i))   {
                case '0': evil++; break;
                case '1': good++; break;
            }
        }
        if(good % 5 == 0){
           return "good";
        } else if (evil % 5 == 0){
           return "evil";
        } else {
           if(good > evil){
              return "good";
           } else if(evil > good){
              return "evil";
           } else {
              return Math.random() >= 0.5 ? "good" : "evil";
           }
        }
    }
}

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


4
আমি যখন জুনিয়র হাইতে আর্টেমিস ফাউল পড়ি তখন কেবল দুটি বইয়ের অস্তিত্ব ছিল। এখানে এখন সাতটি আছে তা দেখে ভাল লাগল এবং ডিজনি এটিকে একটি চলচ্চিত্র বানিয়ে তুলছে।
রেনবোল্ট

1
এখানে 8 টি বই আছে
কাইল কানোজ

7
আরও মারিয়র (আপনি যতক্ষণ না হুইল অব টাইম পড়ছেন)
রেনবোল্ট

1
এবং আপনি break;আপনার মধ্যে ভুলে গেছেন switch
johnchen902

1
@ জোহেনচেএন ৯০২, @ মনু: আমি জাভা সম্পর্কে খুব বেশি অভিজ্ঞ নই (আমি ফোর্টরান ৯০ ব্যবহার করি এবং এখানে কেবল জাভা দেখতে পাই), তাই আমার ত্রুটি। আমি এক ঘন্টা অফিসে getুকলে আমি এগুলি ঠিক করব
কাইল কানোজ

19

Disparnumerophobic

অদ্ভুত সংখ্যা ভয়াবহ।

package Humans;

public class Disparnumerophobic extends Human {
    public final String takeSides(String history) {
        int good = 0, evil = 0;
        for(int i = 0; i < history.length(); i++)   {
            switch(history.charAt(i))   {
                case '0': evil++; break;
                case '1': good++;
            }
        }
        if(good%2 == 1 && evil%2 == 0)  return "evil";
        if(evil%2 == 1 && good%2 == 0)  return "good";
        // well shit.... 
        return Math.random() >= 0.5 ? "good" : "evil";
    }
}

17
মন্তব্য আমাকে হাসি / দুর্যোগ বানিয়েছে।
ফায়ারফক্স

17

লিনাস, রুবি

সর্বদা প্যাটার্নটি ভেঙে বিশ্লেষকদের বিভ্রান্ত করার চেষ্টা করে ।

num_rounds = ARGV[0].to_s.count(',')
LINUS_SEQ = 0xcb13b2d3734ecb4dc8cb134b232c4d3b2dcd3b2d3734ec4d2c8cb134b234dcd3b2d3734ec4d2c8cb134b23734ecb4dcd3b2c4d232c4d2c8cb13b2d3734ecb4dcb232c4d2c8cb13b2d3734ecb4dc8cb134b232c4d3b2dcd3b2d3734ec4d2c8cb134b234dcd3b2d3734ec4d2c8cb134b23734ecb4dcd3b2c4d2c8cb134b2
puts %w[good evil][LINUS_SEQ[num_rounds]]

হিসাবে সংরক্ষণ করুন linus.rbএবং সাথে চালানোruby linus.rb


16

ব্যাকপ্যাকার

এমন খেলোয়াড়কে নির্ধারণ করে যিনি সংখ্যালঘু সংখ্যালঘুটিকে এখনও সবচেয়ে বেশি বেছে নিয়েছেন এবং তার সর্বশেষ ভোট চয়ন করেছেন।

package Humans;

public class BackPacker extends Human {
    // toggles weather the BackPacker thinks majority is better vs. minority is better
    private static final boolean goWithMajority = false;

    @Override
    public final String takeSides(String history)  {
        if (history == null || history.equals(""))
            return "evil";
        String[] roundVotes = history.split(",");
        int players = roundVotes[0].length();
        int[] winningPlayers = new int[players];
        for (String nextRound : roundVotes) {
            boolean didGoodWin = didGoodWin(nextRound, players);
            for (int player = 0; player < nextRound.length(); player++) {
                boolean playerVotedGood = nextRound.charAt(player) == '1';
                winningPlayers[player] += didPlayerWin(didGoodWin, playerVotedGood);
            }
        }
        int bestScore = -1;
        for (int nextPlayer : winningPlayers)
            if (bestScore < nextPlayer)
                bestScore = nextPlayer;
        int bestPlayer = 0;
        for (int ii = 0; ii < players; ii++) {
            if (winningPlayers[ii] == bestScore) {
                bestPlayer = ii;
                break;
            }
        }
        if (roundVotes[roundVotes.length - 1].charAt(bestPlayer) == '1')
            return "good";
        return "evil";
    }

    private int didPlayerWin(boolean didGoodWin, boolean playerVotedGood) {
        if(goWithMajority) {
            return ((didGoodWin && playerVotedGood) || (!didGoodWin && !playerVotedGood)) ? 1 : 0;
        } else {
            return ((!didGoodWin && playerVotedGood) || (didGoodWin && !playerVotedGood)) ? 1 : 0;
        }
    }

    private boolean didGoodWin(String round, int players) {
        int good = 0;
        for (char next : round.toCharArray())
            good += next == '1' ? 1 : 0;
        return (good * 2) > players;
    }
}

ক্রাউডফোলার

এমন খেলোয়াড়কে নির্ধারণ করুন যিনি মিলবে সংখ্যাগরিষ্ঠটি এখনও সবচেয়ে বেশি বেছে নিয়েছেন এবং তার সর্বশেষ ভোটটি চয়ন করেছেন।

package Humans;

public class CrowdFollower extends Human {
    // toggles weather the FrontPacker thinks majority is better vs. minority is better
    private static final boolean goWithMajority = true;

    @Override
    public final String takeSides(String history)  {
        if (history == null || history.equals(""))
            return "evil";
        String[] roundVotes = history.split(",");
        int players = roundVotes[0].length();
        int[] winningPlayers = new int[players];
        for (String nextRound : roundVotes) {
            boolean didGoodWin = didGoodWin(nextRound, players);
            for (int player = 0; player < nextRound.length(); player++) {
                boolean playerVotedGood = nextRound.charAt(player) == '1';
                winningPlayers[player] += didPlayerWin(didGoodWin, playerVotedGood);
            }
        }
        int bestScore = -1;
        for (int nextPlayer : winningPlayers)
            if (bestScore < nextPlayer)
                bestScore = nextPlayer;
        int bestPlayer = 0;
        for (int ii = 0; ii < players; ii++) {
            if (winningPlayers[ii] == bestScore) {
                bestPlayer = ii;
                break;
            }
        }
        if (roundVotes[roundVotes.length - 1].charAt(bestPlayer) == '1')
            return "good";
        return "evil";
    }

    private int didPlayerWin(boolean didGoodWin, boolean playerVotedGood) {
        if(goWithMajority) {
            return ((didGoodWin && playerVotedGood) || (!didGoodWin && !playerVotedGood)) ? 1 : 0;
        } else playerVotedGood                return ((!didGoodWin && good) || (didGoodWin && !playerVotedGood)) ? 1 : 0;
        }
    }

    private boolean didGoodWin(String round, int players) {
        int good = 0;
        for (char next : round.toCharArray())
            good += next == '1' ? 1 : 0;
        return (good * 2) > players;
    }
}

খুব পরিষ্কার প্রোগ্রাম!
রেইনবোল্ট

ওফস, আমি মনে করি আমি আপনার প্রোগ্রামটি অন্য ভাষায় অনুলিপি করেছি।
পাইরুলেজ

@ রুশার আমি কোডটি আপডেট করেছি এবং এটিকে দুটি এন্ট্রি হিসাবে যুক্ত করতে চাই, একটিতে goWithMajority = trueএবং এটির যেখানে একটি false। এটি কি ঠিক আছে, বা এর জন্য আমার কি দ্বিতীয় ব্যাকপ্যাকার যুক্ত করা দরকার?
অ্যাঞ্জেলো ফুকস

@ অ্যাঞ্জেলোনিউশিতজার এই পোস্টটি সম্পাদনা করেছি। এইভাবে, আমি উভয় জমাগুলি যুক্ত করতে ভুলব না। আমি আপনাকে দেওয়া সত্যিকারের অবাস্তব নামটি পরিবর্তন করার পরামর্শ দিচ্ছি এবং আপনি চাইলে উভয়কেই একটি বিবরণ যুক্ত করুন।
রেইনবোল্ট

1
@ রেনবোল্ট আমি আপনার ফ্রন্টপ্যাকারকে আরও ভাল পছন্দ করি। Lol'd।
টমসডিং

15

ফরচুন টেলার

এটি এখনও কাজ চলছে। আমি এখনও এটি পরীক্ষা করিনি। আমি কেবল দেখতে চেয়েছিলাম যে ওপি মনে করে এটি নিয়মগুলি ভঙ্গ করে কিনা।

ফলাফলটি সম্ভাবনার সম্ভাবনা পেতে কয়েকবার অন্যান্য সমস্ত অংশগ্রহণকারীদের মৃত্যুদণ্ড কার্যকর করে পরবর্তী রাউন্ডটি সিমুলেশন করা হয় idea

package Humans;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import sun.net.www.protocol.file.FileURLConnection;

public class FortuneTeller extends Human {

/**
 * Code from http://stackoverflow.com/a/22462785 Private helper method
 *
 * @param directory The directory to start with
 * @param pckgname The package name to search for. Will be needed for
 * getting the Class object.
 * @param classes if a file isn't loaded but still is in the directory
 * @throws ClassNotFoundException
 */
private static void checkDirectory(File directory, String pckgname,
        ArrayList<Class<?>> classes) throws ClassNotFoundException {
    File tmpDirectory;

    if (directory.exists() && directory.isDirectory()) {
        final String[] files = directory.list();

        for (final String file : files) {
            if (file.endsWith(".class")) {
                try {
                    classes.add(Class.forName(pckgname + '.'
                            + file.substring(0, file.length() - 6)));
                } catch (final NoClassDefFoundError e) {
                // do nothing. this class hasn't been found by the
                    // loader, and we don't care.
                }
            } else if ((tmpDirectory = new File(directory, file))
                    .isDirectory()) {
                checkDirectory(tmpDirectory, pckgname + "." + file, classes);
            }
        }
    }
}

/**
 * Private helper method.
 *
 * @param connection the connection to the jar
 * @param pckgname the package name to search for
 * @param classes the current ArrayList of all classes. This method will
 * simply add new classes.
 * @throws ClassNotFoundException if a file isn't loaded but still is in the
 * jar file
 * @throws IOException if it can't correctly read from the jar file.
 */
private static void checkJarFile(JarURLConnection connection,
        String pckgname, ArrayList<Class<?>> classes)
        throws ClassNotFoundException, IOException {
    final JarFile jarFile = connection.getJarFile();
    final Enumeration<JarEntry> entries = jarFile.entries();
    String name;

    for (JarEntry jarEntry = null; entries.hasMoreElements()
            && ((jarEntry = entries.nextElement()) != null);) {
        name = jarEntry.getName();

        if (name.contains(".class")) {
            name = name.substring(0, name.length() - 6).replace('/', '.');

            if (name.contains(pckgname)) {
                classes.add(Class.forName(name));
            }
        }
    }
}

/**
 * Attempts to list all the classes in the specified package as determined
 * by the context class loader
 *
 * @param pckgname the package name to search
 * @return a list of classes that exist within that package
 * @throws ClassNotFoundException if something went wrong
 */
private static ArrayList<Class<?>> getClassesForPackage(String pckgname)
        throws ClassNotFoundException {
    final ArrayList<Class<?>> classes = new ArrayList<Class<?>>();

    try {
        final ClassLoader cld = Thread.currentThread()
                .getContextClassLoader();

        if (cld == null) {
            throw new ClassNotFoundException("Can't get class loader.");
        }

        final Enumeration<URL> resources = cld.getResources(pckgname
                .replace('.', '/'));
        URLConnection connection;

        for (URL url = null; resources.hasMoreElements()
                && ((url = resources.nextElement()) != null);) {
            try {
                connection = url.openConnection();

                if (connection instanceof JarURLConnection) {
                    checkJarFile((JarURLConnection) connection, pckgname,
                            classes);
                } else if (connection instanceof FileURLConnection) {
                    try {
                        checkDirectory(
                                new File(URLDecoder.decode(url.getPath(),
                                                "UTF-8")), pckgname, classes);
                    } catch (final UnsupportedEncodingException ex) {
                        throw new ClassNotFoundException(
                                pckgname
                                + " does not appear to be a valid package (Unsupported encoding)",
                                ex);
                    }
                } else {
                    throw new ClassNotFoundException(pckgname + " ("
                            + url.getPath()
                            + ") does not appear to be a valid package");
                }
            } catch (final IOException ioex) {
                throw new ClassNotFoundException(
                        "IOException was thrown when trying to get all resources for "
                        + pckgname, ioex);
            }
        }
    } catch (final NullPointerException ex) {
        throw new ClassNotFoundException(
                pckgname
                + " does not appear to be a valid package (Null pointer exception)",
                ex);
    } catch (final IOException ioex) {
        throw new ClassNotFoundException(
                "IOException was thrown when trying to get all resources for "
                + pckgname, ioex);
    }

    return classes;
}

private static boolean isRecursiveCall = false;
private static ArrayList<Class<?>> classes;

static {
    if (classes == null) {
        try {
            classes = getClassesForPackage("Humans");
        } catch (ClassNotFoundException ex) {

        }
    }    
}

private String doThePetyrBaelish() {
    return Math.random() >= 0.5 ? "good" : "evil";
}

@Override
public String takeSides(String history) {
    if (isRecursiveCall) {
        return doThePetyrBaelish();
    }
    isRecursiveCall = true;

    int currentRoundGoodCount = 0;
    float probabilityOfGood = 0;
    int roundCount = 0;
    int voteCount = 0;



    do {
        for (int i = 0; i < classes.size(); i++) {
            try {
                if (classes.get(i).getName() == "Humans.FortuneTeller") {
                    continue;
                }

                Human human = (Human) classes.get(i).newInstance();
                String response = human.takeSides(history);
                switch (response) {
                    case "good":
                        currentRoundGoodCount++;
                        voteCount++;
                        break;
                    case "evil":
                        voteCount++;
                        break;
                    default:
                        break;
                }
            } catch (Exception e) {
            }
        }

        probabilityOfGood = (probabilityOfGood * roundCount
                + (float) currentRoundGoodCount / voteCount) / (roundCount + 1);

        roundCount++;
        currentRoundGoodCount = 0;
        voteCount = 0;

    } while (roundCount < 11);

    isRecursiveCall = false;
    if (probabilityOfGood > .7) {
        return "evil";
    }
    if (probabilityOfGood < .3) {
        return "good";
    }

    return doThePetyrBaelish();
}

}

আপনার বট যদি উত্তর দেওয়ার আগে প্রতিটি বাঁকে অন্য সমস্ত বট চালায় তবে উত্তর দেওয়ার জন্য এটি 1 টির বেশি লাগবে না?
প্ল্যানাপাস

@ প্লানাপাস আমি এই বটের সাথে অনুমানটি অনুমান করতে যাচ্ছি যে অন্য প্রত্যেকে সতর্কতার দিকে ভ্রান্ত হতে চলেছে এবং 1 সেকেন্ডের অপেক্ষার কাছাকাছি কিছু এড়াতে চাইবে। আমি ভাবছি এটি কেবল তার সাথে জগাখিচুড়ি করার জন্য "ভাল" ফেরার আগে এটি 0.9 সেকেন্ডের অপেক্ষা সমেত জমা দেওয়া এবং প্রবেশের উপযুক্ত হতে পারে। আসলে, এসবস আমাকে এতে পরাজিত করেছে: ডি
স্ক্রাগার

Yahhh! তারপরে আমার সেই কোডটি আমার কোডটিতে কালো তালিকাভুক্ত করতে হবে। হতাশাজনক হবে ... এছাড়াও পাইথন বা পার্লের মতো বিভিন্ন পরিবেশে বিভিন্ন এন্ট্রি সহ দোভাষীর পুনঃসেট করা লোড এই কোডটি সময়সীমা ছাড়িয়ে যাওয়ার পক্ষে যথেষ্ট হতে পারে।
অ্যান্ডিস

16
অন্য কেউ যদি এটির মতো কাজ করে তবে আপনি একটি অসীম লুপ পাবেন।
ব্রিলিয়ানড

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

15

সি ++, বিজ্ঞানী

সংখ্যাগরিষ্ঠরা প্রতি রাউন্ডে কী বেছে নিয়েছিল wave( ইতিহাসটি একটি রাউন্ডের মধ্যে majority()সংখ্যাগরিষ্ঠের পছন্দ দেয়) ইতিহাসের সাথে এটি চেষ্টা করে, তরঙ্গদৈর্ঘ্য 2*periodএবং ধাপের উপাত্তগুলিতে একটি তরঙ্গ ফিট করে phase। সুতরাং, 0,1,1,1,0,1,0,1,1,1,0,0,0,1,0এটি নির্বাচিত period=3, phase=5( maxat=={3,5}): এর স্কোর হয়ে যায় 9 3 11 5 5 3 5 7 9 7 7 7 7 7 7। এটি সমস্ত সম্ভাব্য সময়কালে লুপ করে এবং যদি সেই সময়ের জন্য স্কোর বর্তমান সর্বাধিকের চেয়ে বেশি হয় তবে এটি {period,phase}যেটির জন্য ঘটেছে তা সংরক্ষণ করে।

এরপরে এটি পাওয়া তরঙ্গকে পরবর্তী রাউন্ডে এক্সপ্লোলেট করে এবং পূর্বাভাসিত সংখ্যাগরিষ্ঠতা গ্রহণ করে।

#include <iostream>
#include <utility>
#include <cstdlib>
#include <cstring>
#if 0
#define DBG(st) {st}
#else
#define DBG(st)
#endif

#define WINDOW (700)

using namespace std;

int majority(const char *r){
    int p=0,a=0,b=0;
    while(true){
        if(r[p]=='1')a++;
        else if(r[p]=='0')b++;
        else break;
        p++;
    }
    return a>b;
}

int main(int argc,char **argv){
    if(argc==1){
        cout<<(rand()%2?"good":"evil")<<endl;
        return 0;
    }
    DBG(cerr<<"WINDOW="<<WINDOW<<endl;)
    int nump,numr;
    nump=strchr(argv[1],',')-argv[1];
    numr=(strlen(argv[1])+1)/(nump+1);
    int fromround=numr-30;
    if(fromround<0)fromround=0;
    int period,r;
    int *wave=new int[WINDOW];
    bool allequal=true;
    DBG(cerr<<"wave: ";)
    for(r=fromround;r<numr;r++){
        wave[r-fromround]=majority(argv[1]+r*(nump+1));
        if(wave[r-fromround]!=wave[0])allequal=false;
        DBG(cerr<<wave[r]<<" ";)
    }
    DBG(cerr<<endl;)
    if(allequal){
        DBG(cerr<<"All equal!"<<endl;)
        if(wave[numr-1]==1)cout<<"evil"<<endl; //choose for minority
        else cout<<"good"<<endl;
        return 0;
    }
    int score,*scores=new int[WINDOW];
    int max=0; //some score will always get above 0, because if some score<0, the inverted wave will be >0.
    int phase,phasemax;
    pair<int,int> maxat(-1,-1); //period, phase
    DBG(cerr<<"scores: ";)
    for(period=1;period<=WINDOW;period++){
        scores[period-1]=0;
        phasemax=-1;
        for(phase=0;phase<2*period;phase++){
            score=0;
            for(r=fromround;r<numr;r++){
                if(wave[r]==1-(r+phase)%(2*period)/period)score++;
                else score--;
            }
            if(score>scores[period-1]){
                scores[period-1]=score;
                phasemax=phase;
            }
        }
        if(scores[period-1]>max){
            max=scores[period-1];
            maxat.first=period;
            maxat.second=phasemax;
        }
        DBG(cerr<<scores[period-1]<<" ";)
    }
    DBG(cerr<<"(max="<<max<<" at {"<<maxat.first<<","<<maxat.second<<"})"<<endl;)
    DBG(cerr<<" max: ("<<numr<<"+"<<maxat.second<<")%(2*"<<maxat.first<<")/"<<maxat.first<<"=="<<((numr+maxat.second)%(2*maxat.first)/maxat.first)<<endl;)
    if(1-(numr+maxat.second)%(2*maxat.first)/maxat.first==1)cout<<"evil"<<endl; //choose for minority
    else cout<<"good"<<endl;
    delete[] wave;
    delete[] scores;
    return 0;
}

সংকলন করুন g++ -O3 -std=c++0x -o Scientist Scientist.cpp(আপনার সতর্কতার দরকার নেই, তাই না -Wall) এবং সাথে চালনা করুন Scientist.exe(সম্ভবত অবশ্যই যুক্তি সহ)। আপনি যদি সত্যিই সুন্দর জিজ্ঞাসা করেন তবে আমি আপনাকে উইন্ডোজ এক্সিকিউটেবল সরবরাহ করতে পারি।

ওহ, এবং ইনপুট ফর্ম্যাটটি নিয়ে গণ্ডগোল করার সাহস করবেন না। এটি অন্যথায় অদ্ভুত কাজ করবে।

সম্পাদনা: স্পষ্টতই, পূর্ববর্তী সংস্করণটি গেমটিতে প্রায় 600 রাউন্ডের বাইরে চলে গেছে। এটি করা উচিত নয়। এর সময় খরচ #define WINDOW (...)লাইন দ্বারা নিয়ন্ত্রিত হয় , আরও ধীর হয় তবে আরও পিছনে ফিরে দেখায়।


8
ইন্টারনেটে ষাট + অপরিচিত দ্বারা লেখা এক্সিকিউটেবলগুলি ডাউনলোড করা একটি খারাপ ধারণা বলে মনে হচ্ছে।
রেইনবোল্ট

@ রাশার আমি সম্পূর্ণরূপে একমত যদি আপনি সমস্যাগুলি চান তবে এটি "ডামিদের জন্য" গাইডের প্রথম ধাপ। যদিও আমার অফারটি দাঁড়িয়ে আছে :)
টমসমেডিং

2
জরিমানা সংকলন করতে (এবং প্রতিযোগিতা) করার জন্য এটি পেয়েছেন।
রেনবোল্ট

14

কোড রানার

সুতরাং, বিষয়গুলিকে আকর্ষণীয় করে তোলার জন্য, আমি প্রতিটি পোস্ট করা উত্তর থেকে স্বয়ংক্রিয়ভাবে কোড ডাউনলোড করতে, প্রয়োজনে সংকলন করতে, এবং তারপরে নিয়ম অনুসারে সমস্ত সমাধান চালানোর জন্য একটি স্ক্রিপ্ট তৈরি করেছি। এইভাবে, লোকেরা কীভাবে করছে তা পরীক্ষা করতে পারে। এই স্ক্রিপ্টটি চালানোর জন্য সংরক্ষণ করুন_আল.পি (বিউটিফুলসপ প্রয়োজন) এবং তারপরে:

usage:
To get the latest code: 'python run_all.py get'
To run the submissions: 'python run_all.py run <optional num_runs>'

কিছু জিনিস:

  1. আপনি যদি আরও ভাষার জন্য সমর্থন যুক্ত করতে চান বা বিকল্পভাবে কিছুটির জন্য সমর্থন সরাতে চান তবে দেখুন def submission_type(lang)
  2. স্ক্রিপ্টটি প্রসারিত করা মোটামুটি সহজ হওয়া উচিত, এমনকী ভাষাগুলির জন্য যা সংকলনের প্রয়োজন (দেখুন CPPSubmission)। ভাষা টাইপটি মেটা কোড ট্যাগ থেকে ধরা হয়েছে< !-- language: lang-java -- > , সুতরাং আপনি যদি নিজের কোডটি চালিত করতে চান তবে এটি যোগ করার বিষয়টি নিশ্চিত করুন (<> এর আগে এবং পরে অতিরিক্ত স্থান সরিয়ে ফেলুন)। আপডেট : ভাষাটি সংজ্ঞায়িত না হলে এখন চেষ্টা এবং সনাক্ত করার জন্য কিছু চূড়ান্ত বুনিয়াদী অনুক্রম রয়েছে।
  3. যদি আপনার কোডটি মোটেও চালাতে ব্যর্থ হয় বা নির্ধারিত সময়ের মধ্যে শেষ করতে ব্যর্থ হয় তবে এটি এতে যুক্ত হবে blacklist.textএবং ভবিষ্যতে বিচারগুলি থেকে স্বয়ংক্রিয়ভাবে সরানো হবে। আপনি যদি নিজের কোডটি ঠিক করেন তবে কেবল কালো তালিকা থেকে আপনার এন্ট্রিটি সরিয়ে পুনরায় রান করুনget ,

বর্তমানে সমর্থিত ভাষা:

 submission_types =  {
    'lang-ruby': RubySubmission,
    'lang-python': PythonSubmission,
    'lang-py': PythonSubmission,
    'lang-java': JavaSubmission,
    'lang-Java': JavaSubmission,
    'lang-javascript': NodeSubmission,
    'lang-cpp': CPPSubmission,
    'lang-c': CSubmission,
    'lang-lua': LuaSubmission,
    'lang-r': RSubmission,
    'lang-fortran': FortranSubmission,
    'lang-bash': BashSubmission
}

আরও ঝামেলা ছাড়া:

import urllib2
import hashlib
import os
import re
import subprocess
import shutil
import time
import multiprocessing
import tempfile
import sys
from bs4 import BeautifulSoup

__run_java__ = """
public class Run {
    public static void main(String[] args) {
        String input = "";
        Human h = new __REPLACE_ME__();
        if(args.length == 1)
            input = args[0];
        try {
            System.out.println(h.takeSides(input));
        }
        catch(Exception e) {
        }
    }
}
"""

__human_java__ = """
public abstract class Human {
    public abstract String takeSides(String history) throws Exception;
}
"""

class Submission():
    def __init__(self, name, code):
        self.name = name
        self.code = code

    def submissions_dir(self):
        return 'submission'

    def base_name(self):
        return 'run'

    def submission_path(self):
        return os.path.join(self.submissions_dir(), self.name)

    def extension(self):
        return ""

    def save_submission(self):
        self.save_code()

    def full_command(self, input):
        return []

    def full_path(self):
        file_name = "%s.%s" % (self.base_name(), self.extension())
        full_path = os.path.join(self.submission_path(), file_name)
        return full_path

    def save_code(self):    
        if not os.path.exists(self.submission_path()):
            os.makedirs(self.submission_path())

        with open(self.full_path(), 'w') as f:
            f.write(self.code)

    def write_err(self, err):
        with open(self.error_log(), 'w') as f:
            f.write(err)

    def error_log(self):
        return os.path.join(self.submission_path(), 'error.txt')

    def run_submission(self, input):
        command = self.full_command()
        if input is not None:
            command.append(input)
        try:
            output,err,exit_code = run(command,timeout=1)
            if len(err) > 0:
                self.write_err(err)
            return output
        except Exception as e:
            self.write_err(str(e))
            return ""

class CPPSubmission(Submission):
    def bin_path(self):
        return os.path.join(self.submission_path(), self.base_name())

    def save_submission(self):
        self.save_code()
        compile_cmd = ['g++', '-O3', '-std=c++0x', '-o', self.bin_path(), self.full_path()]
        errout = open(self.error_log(), 'w')
        subprocess.call(compile_cmd, stdout=errout, stderr=subprocess.STDOUT)

    def extension(self):
        return 'cpp'

    def full_command(self):
        return [self.bin_path()]

class CSubmission(Submission):
    def bin_path(self):
        return os.path.join(self.submission_path(), self.base_name())

    def save_submission(self):
        self.save_code()
        compile_cmd = ['gcc', '-o', self.bin_path(), self.full_path()]
        errout = open(self.error_log(), 'w')
        subprocess.call(compile_cmd, stdout=errout, stderr=subprocess.STDOUT)

    def extension(self):
        return 'c'

    def full_command(self):
        return [self.bin_path()]

class FortranSubmission(Submission):
    def bin_path(self):
        return os.path.join(self.submission_path(), self.base_name())

    def save_submission(self):
        self.save_code()
        compile_cmd = ['gfortran', '-fno-range-check', '-o', self.bin_path(), self.full_path()]
        errout = open(self.error_log(), 'w')
        subprocess.call(compile_cmd, stdout=errout, stderr=subprocess.STDOUT)

    def extension(self):
        return 'f90'

    def full_command(self):
        return [self.bin_path()]

class JavaSubmission(Submission):   
    def base_name(self):
        class_name = re.search(r'class (\w+) extends', self.code)
        file_name = class_name.group(1)
        return file_name

    def human_base_name(self):
        return 'Human'

    def run_base_name(self):
        return 'Run'

    def full_name(self, base_name):
        return '%s.%s' % (base_name, self.extension())

    def human_path(self):
        return os.path.join(self.submission_path(), self.full_name(self.human_base_name()))

    def run_path(self):
        return os.path.join(self.submission_path(), self.full_name(self.run_base_name()))

    def replace_in_file(self, file_name, str_orig, str_new):
        old_data = open(file_name).read()
        new_data = old_data.replace(str_orig, str_new)

        with open(file_name, 'w') as f:
            f.write(new_data)

    def write_code_to_file(self, code_str, file_name):
        with open(file_name, 'w') as f:
            f.write(code_str)

    def save_submission(self):
        self.save_code()
        self.write_code_to_file(__human_java__, self.human_path())
        self.write_code_to_file(__run_java__, self.run_path())

        self.replace_in_file(self.run_path(), '__REPLACE_ME__', self.base_name())
        self.replace_in_file(self.full_path(), 'package Humans;', '')

        compile_cmd = ['javac', '-cp', self.submission_path(), self.run_path()]
        errout = open(self.error_log(), 'w')
        subprocess.call(compile_cmd, stdout=errout, stderr=subprocess.STDOUT)

    def extension(self):
        return 'java'

    def full_command(self):
        return ['java', '-cp', self.submission_path(), self.run_base_name()]

class PythonSubmission(Submission):
    def full_command(self):
        return ['python', self.full_path()]

    def extension(self):
        return 'py'

class RubySubmission(Submission):
    def full_command(self):
        return ['ruby', self.full_path()]

    def extension(self):
        return 'rb'

class NodeSubmission(Submission):
    def full_command(self):
        return ['node', self.full_path()]

    def extension(self):
        return 'js'

class LuaSubmission(Submission):
    def full_command(self):
        return ['lua', self.full_path()]

    def extension(self):
        return 'lua'

class RSubmission(Submission):
    def full_command(self):
        return ['Rscript', self.full_path()]

    def extension(self):
        return 'R'

class BashSubmission(Submission):
    def full_command(self):
        return [self.full_path()]

    def extension(self):
        return '.sh'

class Scraper():
    def download_page(self, url, use_cache = True, force_cache_update = False):
        file_name = hashlib.sha1(url).hexdigest()

        if not os.path.exists('cache'):
            os.makedirs('cache')

        full_path = os.path.join('cache', file_name)
        file_exists = os.path.isfile(full_path)

        if use_cache and file_exists and not force_cache_update:
            html = open(full_path, 'r').read()
            return html

        opener = urllib2.build_opener()
        opener.addheaders = [('User-agent', 'Mozilla/5.0')]
        response = opener.open(url)
        html = response.read()

        if use_cache:
            f = open(full_path, 'w')
            f.write(html)
            f.close()

        return html

    def parse_post(self, post):
        name = post.find(text=lambda t: len(t.strip()) > 0)
        pre = post.find('pre')
        lang = pre.attrs['class'][0] if pre.has_attr('class') else None
        code = pre.find('code').text
        user = post.find(class_='user-details').find(text=True)
        return {'name':name,'lang':lang,'code':code,'user':user}

    def parse_posts(self, html):
        soup = BeautifulSoup(html)
        # Skip the first post
        posts = soup.find_all(class_ = 'answercell')
        return [self.parse_post(post) for post in posts]

    def get_submissions(self,  page = 1, force_cache_update = False):
        url = "http://codegolf.stackexchange.com/questions/33137/good-versus-evil?page=%i&tab=votes#tab-top" % page
        html = self.download_page(url, use_cache = True, force_cache_update = force_cache_update)
        submissions = self.parse_posts(html)
        return submissions

class Timeout(Exception):
    pass

def run(command, timeout=10):
    proc = subprocess.Popen(command, bufsize=0, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    poll_seconds = .250
    deadline = time.time()+timeout
    while time.time() < deadline and proc.poll() == None:
        time.sleep(poll_seconds)

    if proc.poll() == None:
        if float(sys.version[:3]) >= 2.6:
            proc.terminate()
        raise Timeout()

    stdout, stderr = proc.communicate()
    return stdout, stderr, proc.returncode


def guess_lang(code):
    if re.search(r'class .* extends Human', code):
        return 'lang-java'
    if re.search(r'import sys', code):
        return 'lang-python'
    if re.search(r'puts', code) and (re.search(r'ARGV', code) or re.search(r'\%w', code)):
        return 'lang-ruby'
    if re.search(r'console\.log', code):
        return 'lang-javascript'
    if re.search(r'program', code) and re.search(r'subroutine', code):
        return 'lang-fortran'
    if re.search(r'@echo off', code):
        return 'lang-bash'
    return None


def submission_type(lang, code):
    submission_types =  {
        'lang-ruby': RubySubmission,
        'lang-python': PythonSubmission,
        'lang-py': PythonSubmission,
        'lang-java': JavaSubmission,
        'lang-Java': JavaSubmission,
        'lang-javascript': NodeSubmission,
        'lang-cpp': CPPSubmission,
        'lang-c': CSubmission,
        'lang-lua': LuaSubmission,
        'lang-r': RSubmission,
        'lang-fortran': FortranSubmission,
        'lang-bash': BashSubmission
    }

    klass = submission_types.get(lang)

    if klass is None:
        lang = guess_lang(code)
        klass = submission_types.get(lang)

    return klass

def instantiate(submission):
    lang = submission['lang']
    code = submission['code']
    name = submission['name']

    klass = submission_type(lang, code)
    if klass is not None:
        instance = klass(name, code)
        return instance
    print "Entry %s invalid - lang not supported: %s" % (name, lang)
    return None

def get_all_instances(force_update):
    scraper = Scraper()

    print 'Scraping Submissions..'

    pages = [1,2,3]
    submissions_by_page = [scraper.get_submissions(page=i, force_cache_update=force_update) for i in pages]
    submissions = [item for sublist in submissions_by_page for item in sublist]

    # Get instances
    raw_instances = [instantiate(s) for s in submissions]
    instances = [i for i in raw_instances if i]

    print "Using %i/%i Submissions" % (len(instances), len(submissions))

    return instances

def save_submissions(instances):
    print 'Saving Submissions..'

    for instance in instances:
        instance.save_submission()

def init_game(save=True, force_update=False):
    instances = get_all_instances(force_update)
    if save:
        save_submissions(instances)
    return instances

def one_run(instances, input):
    valid = {
        'good': 1,
        'evil': 0
    }

    disqualified = []
    results = []

    for instance in instances:
        out = instance.run_submission(input)
        res = out.strip().lower()
        if res not in valid:
            disqualified.append(instance)
        else:
            results.append(valid[res])

    return (results, disqualified)

def get_winner(scores, instances):
    max_value = max(scores)
    max_index = scores.index(max_value)
    instance = instances[max_index]
    return (instance.name, max_value)

def update_scores(results, scores, minority_counts, minority_num):
    for i in range(len(results)):
        if results[i] == minority_num:
            minority_counts[i] += 1
            scores[i] += (minority_counts[i] - 1)
        else:
            minority_counts[i] = 0
            scores[i] += 3

def try_run_game(instances, num_runs = 1000, blacklist = None):
    current_input = None
    minority_str = None
    num_instances = len(instances)
    scores = [0] * num_instances
    minority_counts = [0] * num_instances

    print "Running with %i instances..." % num_instances

    for i in range(num_runs):
        print "Round: %i - Last minority was %s" % (i, minority_str)
        results, disqualified = one_run(instances, current_input)

        if len(disqualified) > 0:
            for instance in disqualified:
                print "Removing %s!" % instance.name
                instances.remove(instance)

                if blacklist is not None:
                    with open(blacklist, 'a') as f:
                        f.write("%s\n" % instance.name)

            return False

        latest_result = "".join(map(str,results))
        current_input = "%s,%s" % (current_input, latest_result)

        minority_num = 1 if results.count(1) < results.count(0) else 0
        minority_str = 'good' if minority_num == 1 else 'evil'

        update_scores(results, scores, minority_counts, minority_num)
        name, score = get_winner(scores, instances)
        print "%s is currently winning with a score of %i" % (name, score)

    print "The winner is %s with a score of %i!!!" % (name, score)
    return True

def find_instance_by_name(instances, name):
    for instance in instances:
        if instance.name == name:
            return instance
    return None

def maybe_add_or_remove_baelish(instances, baelish):
    num_instances = len(instances)

    if num_instances % 2 == 0:
        print 'There are %i instances.' % num_instances
        try:
            instances.remove(baelish)
            print 'Baelish Removed!'
        except:
            instances.append(baelish)
            print 'Baelish Added!'

def remove_blacklisted(blacklist, instances):
    blacklisted = []

    try:
        blacklisted = open(blacklist).readlines()
    except:
        return

    print 'Removing blacklisted entries...'

    for name in blacklisted:
        name = name.strip()
        instance = find_instance_by_name(instances, name)
        if instance is not None:
            print 'Removing %s' % name
            instances.remove(instance)

def run_game(instances, num_runs):
    blacklist = 'blacklist.txt'
    remove_blacklisted(blacklist, instances)

    baelish = find_instance_by_name(instances, 'Petyr Baelish') 
    maybe_add_or_remove_baelish(instances, baelish)

    while not try_run_game(instances, num_runs = num_runs, blacklist = blacklist):
        print "Restarting!"
        maybe_add_or_remove_baelish(instances, baelish)

    print "Done!"

if __name__ == '__main__':
    param = sys.argv[1] if len(sys.argv) >= 2 else None

    if param == 'get':
        instances = init_game(save=True, force_update=True)
    elif param == 'run':
        instances = init_game(save=False, force_update=False)
        num_runs = 50
        if len(sys.argv) == 3:
            num_runs = int(sys.argv[2])
        run_game(instances, num_runs)
    else:
        self_name = os.path.basename(__file__)
        print "usage:"
        print "To get the latest code: 'python %s get'" % self_name
        print "To run the submissions: 'python %s run <optional num_runs>'" % self_name


@ কাইলিকানোস - আমি এটির জন্য সমর্থন যুক্ত করেছি, শীঘ্রই কোডটি আপডেট করব।
হোয়াট ওয়ার্ল্ড

হ্যাঁ! আমি (বাছাই) আমার ফোর্টরান জমা দেওয়ার জন্য কঠোর পরিশ্রম করেছি এবং রুশার এটির কাজটি করতে পারা যায় না তাই আমি চাই কেউ এটি পেয়ে যায় :)
কাইল কানস

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

1
আপনি এর জন্য প্রতিবেদনের প্রাপ্য, তবে যেহেতু এটি প্রশ্নের সঠিক উত্তর নয় (এবং সম্ভবত অন্যান্য ভাষায় স্টাফ যুক্ত সম্প্রদায়টি উপকৃত হতে পারে) আমি মনে করি এটি প্রযুক্তিগতভাবে একটি সম্প্রদায়ের উইকি হওয়া উচিত।
মার্টিন এন্ডার

13

দ্য বিউটিফুল মাইন্ড, রুবি

শেষ রাউন্ডের বিট উপস্থাপনায় প্রশ্নবিদ্ধ তাত্পর্যের নিদর্শনগুলির ভিত্তিতে তার সিদ্ধান্ত নেয়

require 'prime'

if ARGV.length == 0
    puts ["good", "evil"].sample
else
    last_round = ARGV[0].split(',').last
    puts Prime.prime?(last_round.to_i(2)) ? "good" : "evil"
end

মত দৌড়াও

ruby beautiful-mind.rb

13

পাইস্টিটিয়াস, লুয়া

একটি কুসংস্কারমূলক প্রোগ্রাম যা সাইনস এবং আশ্চর্যের মধ্যে বিশ্বাস করে।

history = arg[1]

if history == nil then
    print("good")
else
    local EvilSigns, GoodSigns = 0,0
    local SoulSpace = ""

    for i in string.gmatch(history, "%d+") do
         SoulSpace = SoulSpace .. i 
    end

    if string.match(SoulSpace, "1010011010")  then -- THE NUBMER OF THE BEAST!
        local r = math.random(1000)
        if r <= 666 then print("evil") else print("good") end
    else
        for i in string.gmatch(SoulSpace, "10100") do -- "I'M COMING" - DEVIL
            EvilSigns = EvilSigns + 1
        end
        for i in string.gmatch(SoulSpace, "11010") do -- "ALL IS WELL" - GOD
            GoodSigns = GoodSigns + 1
        end

        if EvilSigns > GoodSigns then 
            print("evil")
        elseif GoodSigns > EvilSigns then
            print("good")
        elseif GoodSigns == EvilSigns then
            local r = math.random(1000)
            if r <= 666 then print("good") else print("evil") end
        end
    end
end

এটি দিয়ে চালান:

lua Piustitious.lua

ইনপুট অনুসরণ করে।


11

উইনচেষ্টার্স

স্যাম এবং ডিন ভাল (বেশিরভাগ সময়)।

package Humans;

public class TheWinchesters extends Human {

    @Override
    public String takeSides(String history) throws Exception {
        return Math.random() < 0.1 ? "evil" : "good";
    }

}

আপনি কি নিশ্চিত 9:1যে সঠিক অনুপাত? হতে পারে আমাদের কিছু ডেটা মাইনিং করা উচিত এবং আরও নিখুঁত অনুপাত পাওয়া উচিত?
recursion.ninja

1
@ ওয়াশবার্ন আমি 2 মাস আগে অতিপ্রাকৃত দেখতে শুরু করেছি (এখন 9 মরসুমে আটকে গেছে) এবং 9:1আমার কাছে ঠিক আছে বলে মনে হয়;)
কমনগ্যুই

10

পরিসংখ্যানবিৎ

public class Statistician extends Human{
    public final String takeSides(String history) { 
        int side = 0;
        String[] hist = history.split(",");
        for(int i=0;i<hist.length;i++){
            for(char c:hist[i].toCharArray()){
                side += c == '1' ? (i + 1) : -(i + 1);
            }
        }
        if(side == 0) side += Math.round(Math.random());
        return side > 0 ? "good" : "evil";
    }
}

5
দ্বিতীয় দ্বিতীয় লাইনটি এত দুর্দান্ত
cjfaure

5
@ অনুমোদিত পরিবর্তে Math.ceil(Math.random()-Math.random())আপনি ঠিক করতে পারেন Math.round(Math.random())
টমসডিং

10

আর, কিছুটা বায়েশিয়ান বট

অন্যান্য ব্যবহারকারীর আউটপুট এর পূর্ব সম্ভাবনা হিসাবে প্রতিটি ব্যবহারকারীর জন্য ফ্রিকোয়েন্সি টেবিল ব্যবহার করুন।

args <- commandArgs(TRUE)
if(length(args)!=0){
    history <- do.call(rbind,strsplit(args,","))
    history <- do.call(rbind,strsplit(history,""))
    tabulated <- apply(history,2,function(x)table(factor(x,0:1)))
    result <- names(which.max(table(apply(tabulated, 2, function(x)sample(0:1,1, prob=x)))))
    if(result=="1"){cat("good")}else{cat("evil")}
}else{
    cat("good")
    }

প্রার্থনা ব্যবহার Rscript BayesianBot.Rইনপুট করে।

সম্পাদনা করুন : এটি কী করছে তা কেবল পরিষ্কার করার জন্য, উদাহরণ ইনপুট সহ ধাপে ধাপে এখানে:

> args
[1] "11011,00101,11101,11111,00001,11001,11001"
> history #Each player is a column, each round a row
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    0    1    1
[2,]    0    0    1    0    1
[3,]    1    1    1    0    1
[4,]    1    1    1    1    1
[5,]    0    0    0    0    1
[6,]    1    1    0    0    1
[7,]    1    1    0    0    1

> tabulated #Tally of each player previous decisions.
  [,1] [,2] [,3] [,4] [,5]
0    2    2    4    5    0
1    5    5    3    2    7

তারপরে result<-প্রতিটি প্লেয়ারের জন্য শুরু হওয়া লাইনটি সর্বশেষ টেবিলটি ওজন হিসাবে ব্যবহার করে 0 বা 1 এলোমেলোভাবে বাছাই করে (অর্থাত প্লেয়ার 1 এর জন্য 0 বাছাইয়ের সম্ভাবনা 2/7 তম, 1 বা 5/7 তম বাছাইয়ের ইত্যাদি)। এটি প্রতিটি প্লেয়ার / কলামের জন্য একটি ফলাফল তুলে ধরে এবং শেষ পর্যন্ত সেই সংখ্যাটি দেয় যা সর্বাধিক সাধারণ হয়ে যায়।


10

সুইস

সর্বদা নিরপেক্ষতা বজায় রাখে। কখনই জিততে হবে না।

package Humans;

/**
 * Never choosing a side, sustaining neutrality
 * @author Fabian
 */
public class Swiss extends Human {   
    public String takeSides(String history) {
        return "neutral"; // wtf, how boring is that?
    }
}

আমি এটা লিখিনি!
রেইনবোল্ট

এটাই বিড়ম্বনা। নিরপেক্ষতা কখনই জিততে পারে না
চমত্কার

2
@ রাশার আহ আমি এখন এটি পেয়েছি: ডি
ফেবিগলার

1
এটি সংকলনও করে না - একটি অনুপস্থিত অর্ধিকোলন রয়েছে।
পাওলো ইবারম্যান

9

এইচএল 9000

#!/usr/bin/env perl
print eval("evil")

সম্পাদনা করুন: সম্ভবত এটি এইচএল 9000 এর জন্য আরও উপযুক্ত, তবে সাবধান! এটা খুব খারাপ। cdডিরেক্টরি চালানোর আগে আমি খালি করার পরামর্শ দিই ।

#!/usr/bin/env perl
print eval {
    ($_) = grep { -f and !/$0$/ } glob('./*');
    unlink;
    evil
}

এটি cwdপ্রতিটি অনুরোধের জন্য একটি ফাইল সরিয়ে দেয় !

এত স্পষ্ট প্রার্থনা নয়:

এম $

D:\>copy con hal_9000.pl
#!/usr/bin/env perl
print eval("evil")
^Z
        1 file(s) copied.

D:>hal_9000.pl
evil

* নিক্সে

[core1024@testing_pc ~]$ tee hal_9000.pl
#!/usr/bin/env perl
print eval("evil")
# Press C-D here
[core1024@testing_pc ~]$ chmod +x $_
[core1024@testing_pc ~]$ ./$_
evil[core1024@testing_pc ~]$

আপনার প্রোগ্রামটি চালানোর জন্য আপনাকে একটি কমান্ড সরবরাহ করতে হবে। আরও তথ্যের জন্য চ্যালেঞ্জের "বিতরণযোগ্য" বিভাগটি দেখুন।
রেনবোল্ট

@ রুশার সম্পন্ন;)
কোর 1024

9

মেজরিটির ইচ্ছা

import sys
import random

if len(sys.argv)==1:
    print(random.choice(['good','evil']))
else:
    rounds=sys.argv[1].split(',')
    last_round=rounds[-1]
    zeroes=last_round.count('0')
    ones=last_round.count('1')
    if ones>zeroes:
        print('good')
    elif zeroes>ones:
        print('evil')
    elif ones==zeroes:
        print(random.choice(['good','evil']))

এটি হিসাবে সংরক্ষণ করুন WotM.py , python3 WotM.pyইনপুট অনুসারে চালান ।

একটি সহজ প্রোগ্রাম, এটি কীভাবে করবে তা দেখতে to গত বারের সংখ্যাগরিষ্ঠ যা বলেছিল তা নিয়ে যায়, অন্যথায় এলোমেলো।


আপনার প্রোগ্রামটি চালানোর জন্য আপনাকে একটি কমান্ড সরবরাহ করতে হবে। আরও তথ্যের জন্য চ্যালেঞ্জের "বিতরণযোগ্য" বিভাগটি দেখুন।
রেনবোল্ট

এটা খারাপ, এটি আমার একটি সদৃশ করে তোলে। : ডি সংখ্যালঘুতে আমার পরিবর্তন হয়েছে।
মার্টিন ইন্ডার 21

@ রাশার কমান্ডটি যুক্ত করেছেন। আপনি কি খুঁজছিলেন?
isaacg

নিখুঁত!
রেইনবোল্ট

1
আমি স্কোরবোর্ডের স্কোরগুলি থেকে গড় র‌্যাঙ্কিংয়ের গণনা করেছি এবং এই এন্ট্রিটি সেই পরিমাপের দ্বারা জয়ী হয়।
ব্রিলিয়ান্ড

9

অ্যালান শিয়ের

তিনি যে ব্যক্তিটির পাশে বসেছেন কেবল সে যা বলেছে তার পুনরাবৃত্তি করে। যদি ব্যক্তিটি ভুল হিসাবে দেখা দেয় তবে তিনি পরবর্তী ব্যক্তির দিকে এগিয়ে যান এবং পরিবর্তে তারা যা বলে তার পুনরাবৃত্তি করে।

package Humans;

/**
 * Alan Shearer copies someone whilst they're right; if they get predict
 * wrongly then he moves to the next person and copies whatever they say.
 *
 * @author Algy
 * @url http://codegolf.stackexchange.com/questions/33137/good-versus-evil
 */
public class AlanShearer extends Human {

    private char calculateWinner(String round) {
        int good = 0, evil = 0;

        for (int i = 0, L = round.length(); i < L; i++) {
            if (round.charAt(i) == '1') {
                good++;
            } else {
                evil++;
            }
        }

        return (good >= evil) ? '1' : '0';
    }

    /**
     * Take the side of good or evil.
     * @param history The past votes of every player
     * @return A String "good" or "evil
     */
    public String takeSides(String history) {
        String[] parts = history.split(",");
        String lastRound = parts[parts.length() - 1];

        if (parts.length() == 0 || lastRound.length() == 0) {
            return "good";
        } else {
            if (parts.length() == 1) {
                return lastRound.charAt(0) == '1' ? "good" : "evil";
            } else {
                int personToCopy = 0;

                for (int i = 0, L = parts.length(); i < L; i++) {
                    if (parts[i].charAt(personToCopy) != calculateWinner(parts[i])) {
                        personToCopy++;

                        if (personToCopy >= L) {
                            personToCopy = 0;
                        }
                    }
                }
            }

            return lastRound.charAt(personToCopy) == '1' ? "good" : "evil";
        }
    }
}

lastRoundএমনকি আপনি এটি ঘোষণার আগে ডাকা একটি পরিবর্তনশীল উল্লেখ করুন । এছাড়াও, আপনি আপনার সকলের সাথে প্রথম বন্ধনী যুক্ত করেছেন String.lengthতবে এটি কোনও ফাংশন নয়। আপনি কি আপনার জমাটি এমন একটি বিন্দুতে পেতে পারেন যেখানে এটি সংকলন করবে?
রেনবোল্ট

@ রুশার - সম্পন্ন :)
অ্যালজি টেলর

@ অ্যালজি: lastRound.lengthএখনও lastRoundঘোষিত হওয়ার আগেই ( প্রথমত যদি) অ্যাক্সেস করা হয় (এটি যদি অন্যটি হয় তবে)। আপনার কোডটি এখানে জমা দেওয়ার আগে সংকলনের চেষ্টা করুন (এবং সম্ভবত চালানো) run
পাওলো ইবারম্যান

@ পাওলোবারম্যান - দুঃখিত, আমি এমন পরিবেশে নেই যেখানে আমি এটি চালাতে পারি - সংশোধন করা হয়েছে, যদিও
অ্যালজি টেলর

সুযোগের বাইরে থাকলে এখন আপনি "পার্সোনটোকপি" নামে একটি ভেরিয়েবল উল্লেখ করছেন। আমি এটি অন্য ব্লকের ভিতরে সরিয়ে নিয়েছি যাতে এটি সংকলন করতে পারে, তবে আপনি কী চেয়েছিলেন তা আমি জানি না।
রেনবোল্ট

8

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

মৃত্যুদণ্ড কার্যকর করার মধ্যে সময়ের পরিমাণ পরিমাপ করে। সময়ের পার্থক্য যদি গত সময়ের চেয়ে বেশি হয় তবে তা অবশ্যই মন্দ। অন্যথায়, ভাল।

var fs = require('fs'),
currentTime = (new Date).getTime();

try {
    var data = fs.readFileSync('./laterisevil.txt', 'utf8');
} catch (e) { data = '0 0'; } // no file? no problem, let's start out evil at epoch

var parsed = data.match(/(\d+) (\d+)/),
lastTime = +parsed[1],
lastDifference = +parsed[2],
currentDifference = currentTime - lastTime;

fs.writeFileSync('./laterisevil.txt', currentTime + ' ' + currentDifference, 'utf8');
console.log(currentDifference > lastDifference? 'evil' : 'good');

সাথে চালান: node laterisevil.js


8

প্যাটার্ন ফাইন্ডার, পাইথন

পুনরাবৃত্ত হওয়া প্যাটার্নটির সন্ধান করে এবং এটি যদি একটিটি না খুঁজে পায় তবে সিংহভাগের সাথে চলে।

import sys

if len(sys.argv) == 1: 
    print('good')
    quit()

wins = ''.join(
    map(lambda s: str(int(s.count('1') > s.count('0'))),
        sys.argv[1].split(',')
    )
)

# look for a repeating pattern
accuracy = []

for n in range(1, len(wins)//2+1):
    predicted = wins[:n]*(len(wins)//n)
    actual    = wins[:len(predicted)]
    n_right = 0
    for p, a in zip(predicted, actual):
        n_right += (p == a)
    accuracy.append(n_right/len(predicted))

# if there's a good repeating pattern, use it
if accuracy:
    best = max(accuracy)
    if best > 0.8:
        n = accuracy.index(best)+1
        prediction = wins[:n][(len(wins))%n]
        # good chance of success by going with minority
        if prediction == '1':
            print('evil')
        else:
            print('good')
        quit()

# if there's no good pattern, just go with the majority
if wins.count('1') > wins.count('0'):
    print('good')
else:
    print('evil')

সাথে চালানো

python3 pattern_finder.py

1
আমি এই কোডটি খুব পছন্দ করি, যখন আমি এটি চালাই, এটি সর্বদা 3000 পিটি পেতে হয়, কোনওভাবে।
রিয়েলডিও

8

টার্নকোট

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

package Humans;

public class Turncoat extends Human {
    public final String takeSides(String history) {
        String[] hist = history.split(",");

        return (hist.length % 2) == 0 ? "good" : "evil";
    }
}

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

অলস টার্নকোট

অলস টার্নকোটটি টার্নকোটের মতো শুরু হয়, তবে রাউন্ডগুলি পাস করার সাথে সাথে, তিনি অলস এবং অলস হয়ে যান অন্যদিকে যেতে।

package Humans;

public class LazyTurncoat extends Human {
    public final String takeSides(String history) {
        int round = history.length() == 0 ? 0 : history.split(",").length;
        int momentum = 2 + ((round / 100) * 6);
        int choice = round % momentum;
        int between = momentum / 2;

        return choice < between ? "good" : "evil";
    }
}

2
অলস টার্নকোটটি দুর্দান্ত!
অ্যাঞ্জেলো ফুকস

আপনি যদি কিছু মনে না করেন তবে আমি উভয়কেই অন্তর্ভুক্ত করছি।
রেনবোল্ট

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

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

8

জীবনী লেখক, রুবি

rounds = ARGV[0].split(',') rescue []

if rounds.length < 10
  choice = 1
else
  outcome_history = ['x',*rounds.map{|r|['0','1'].max_by{|s|r.count s}.tr('01','ab')}]
  player_histories = rounds.map{|r|r.chars.to_a}.transpose.map{ |hist| outcome_history.zip(hist).join }
  predictions = player_histories.map do |history|
    (10).downto(0) do |i|
      i*=2
      lookbehind = history[-i,i]
      @identical_previous_behavior = history.scan(/(?<=#{lookbehind})[10]/)
      break if @identical_previous_behavior.any?
    end
    if @identical_previous_behavior.any?
      (@identical_previous_behavior.count('1')+1).fdiv(@identical_previous_behavior.size+2)
    else
      0.5
    end
  end
  simulations = (1..1000).map do
    votes = predictions.map{ |chance| rand < chance ? 1 : 0 }
    [0,1].max_by { |i| votes.count(i) }
  end
  choice = case simulations.count(1)/10
    when 0..15
      1
    when 16..50
      0
    when 51..84
      1
    when 85..100
      0
  end
end

puts %w[evil good][choice]

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

হিসাবে সংরক্ষণ করুন, হিসাবে biographer.rbচালানোruby biographer.rb

ধারণাটি হ'ল প্রতিটি খেলোয়াড়ের জন্য, এটি শেষ দশ রাউন্ডের জন্য তাদের নিজস্ব পছন্দগুলি এবং সামগ্রিক ফলাফলগুলি এবং অতীতে উদাহরণগুলি খুঁজে পেয়ে যেখানে "অভিন্ন" বাছাইয়ের তাদের সম্ভাবনাগুলি অনুমান করে যেখানে অভিন্ন পরিস্থিতি (তাদের ভোট + সামগ্রিকভাবে) ফলাফল) ঘটেছে। এটি দীর্ঘতম পিছনের দৈর্ঘ্যটি 10 ​​রাউন্ড পর্যন্ত তুলে ধরেছে, যেমন কোনও নজির রয়েছে এবং এটি ফ্রিকোয়েন্সি তৈরি করতে ব্যবহার করে (ল্যাপ্লেসের উত্তরাধিকার সূত্রে সামঞ্জস্য করা হয়েছে, যাতে আমরা কখনই কারও সম্পর্কে 100% আত্মবিশ্বাসী নই)।

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


8

বিশ্বাসঘাতক লোক

জুডাস সত্যই ভাল ব্যক্তি। দুঃখের বিষয় তিনি কয়েক পয়সা দিয়ে ভাল ছেলেদের সাথে বিশ্বাসঘাতকতা করবেন।

package Humans;

public class Judas extends Human {

    private static final String MONEY = ".*?0100110101101111011011100110010101111001.*?";

    public String takeSides(String history) {
       return history != null && history.replace(",","").matches(MONEY) ? "evil" : "good";
    }
}

1
এটি কেবলমাত্র কি কখনো মন্দ ভোট যদি পর্যাপ্ত অংশগ্রহণকারী নেই, আপনি অপসারণ করতে পারেন ,আউট history, আরও বেশি, তাই হিসাবে Rusher ও দলে দলে খেলা বিভক্ত করতে যাচ্ছে।
অ্যাঞ্জেলো ফুকস

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

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

7

ফ্যালাসিয়াস জুয়ালার (পাইথন)

এক পক্ষ যদি একাধারে একাধিকবার সংখ্যাগরিষ্ঠতা অর্জন করে, জুয়াড়ি বুঝতে পারে যে অন্য পক্ষের পরের রাউন্ডের (ডান?) সংখ্যাগরিষ্ঠ হওয়ার সম্ভাবনা বেশি এবং এটি তার ভোটকে প্রভাবিত করে। তিনি সংখ্যালঘুদের জন্য লক্ষ্য রাখেন, কারণ যদি তিনি একবার সংখ্যালঘুতে পরিণত হন তবে তিনি সম্ভবত এটি বেশ কয়েকবার তৈরি করতে পারেন (ডান?) এবং প্রচুর পয়েন্ট পাবেন।

import sys
import random

def whoWon(round):
    return "good" if round.count("1") > round.count("0") else "evil"

if len(sys.argv) == 1:
    print random.choice(["good", "evil"])
else:
    history = sys.argv[1]
    rounds = history.split(",")
    lastWin = whoWon(rounds[-1])
    streakLength = 1
    while streakLength < len(rounds) and whoWon(rounds[-streakLength]) == lastWin:
        streakLength += 1
    lastLoss = ["good", "evil"]
    lastLoss.remove(lastWin)
    lastLoss = lastLoss[0] 
    print lastWin if random.randint(0, streakLength) > 1 else lastLoss  

ব্যবহার

প্রথম দফার জন্য:

python gambler.py

এবং তারপরে:

python gambler.py 101,100,001 etc.

4
আমি পছন্দ করি আপনি কীভাবে আপনার কোড সম্পর্কে নিশ্চিত মনে করেন? : P: P
আইয়্যাটবেগেলস

7

সেলুলার অটোমেটন

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

দয়া করে কোনও ভুল ক্ষমা করুন, আমার লাঞ্চের সময় এটিকে ভেঙে ফেলা হয়েছিল। ;)

package Humans;

public class CellularAutomaton extends Human {

    private static final String GOOD_TEXT = "good";

    private static final String EVIL_TEXT = "evil";

    private int numRows;

    private int numColumns;

    private int[][] world;

    @Override
    public String takeSides(String history) {
        String side = GOOD_TEXT;

        if (history.isEmpty()) {
            side = Math.random() <= 0.5 ? GOOD_TEXT : EVIL_TEXT;
        }

        else {
            String[] prevVotes = history.split(",");

            numRows = prevVotes.length;

            numColumns = prevVotes[0].length();

            world = new int[numRows][numColumns];

            for (int i = 0; i < numColumns; i++) {
                for (int j = 0; j < numRows; j++) {
                    world[j][i] =
                        Integer.parseInt(Character.toString(prevVotes[j].charAt(i)));
                }
            }

            int totalAlive = 0;
            int total = numRows * numColumns;
            for (int i = 0; i < numColumns; i++) {
                for (int j = 0; j < numRows; j++) {
                    totalAlive += getAlive(world, i, j);
                }
            }
            if (totalAlive < total / 2) {
                side = EVIL_TEXT;
            }
        }

        return side;
    }

    private int getAlive(int[][] world, int i, int j) {
        int livingNeighbors = 0;

        if (i - 1 >= 0) {
            if (j - 1 >= 0) {
                livingNeighbors += world[j - 1][i - 1];
            }
            livingNeighbors += world[j][i - 1];
            if (j + 1 < numRows) {
                livingNeighbors += world[j + 1][i - 1];
            }
        }
        if (j - 1 >= 0) {
            livingNeighbors += world[j - 1][i];
        }
        if (j + 1 < numRows) {
            livingNeighbors += world[j + 1][i];
        }
        if (i + 1 < numColumns) {
            if (j - 1 >= 0) {
                livingNeighbors += world[j - 1][i + 1];
            }
            livingNeighbors += world[j][i + 1];
            if (j + 1 < numRows) {
                livingNeighbors += world[j + 1][i + 1];
            }
        }

        return livingNeighbors > 1 && livingNeighbors < 4 ? 1 : 0;
    }
}

1
আমি পরীক্ষার জন্য কোড থেকে মুদ্রণ লাইনটি সরিয়ে ফেলেছি .. জাভা এন্ট্রিগুলিতে কেবল ভাল বা মন্দটি ফিরে আসে, এটি মুদ্রণ করা হয় না।
রেনবোল্ট

7

রিজ প্রফেসর ড

আমি আশা করি লাইব্রেরি ব্যবহারের অনুমতি দেওয়া হয়েছে, এক = ছাড়া এটি করার মতো মনে করবেন না)

মূল ধারণাটি হ'ল প্রতিটি রাউন্ডের প্রতিদ্বন্দ্বীদের জন্য একটি রিজ রিগ্রেশন শ্রেণিবদ্ধকারীকে প্রশিক্ষণ দেওয়া, বৈশিষ্ট্য হিসাবে প্রতিটি রাউন্ডের 30 টি ফলাফল ব্যবহার করে। মূলত সমস্ত খেলোয়াড়ের জন্য প্রতিটি খেলোয়াড়ের ফলাফলের পূর্বাভাস দেওয়ার জন্য শেষ পর্বের ফলাফলের অন্তর্ভুক্ত ছিল, তবে অংশগ্রহণকারীদের সংখ্যা যখন বড় হয় (তখন বলুন, 50 বা তার বেশি) সময়ের সাথে সাথে এটি কেটে ফেলছিল।

#include <iostream>
#include <string>
#include <algorithm>
#include "Eigen/Dense"

using Eigen::MatrixXf;
using Eigen::VectorXf;
using Eigen::IOFormat;
using std::max;

void regress(MatrixXf &feats, VectorXf &classes, VectorXf &out, float alpha = 1) {
    MatrixXf featstrans = feats.transpose();
    MatrixXf AtA = featstrans * feats;

    out = (AtA + (MatrixXf::Identity(feats.cols(), feats.cols()) * alpha)).inverse() * featstrans * classes;
}

float classify(VectorXf &weights, VectorXf &feats) {
    return weights.transpose() * feats;
}

size_t predict(MatrixXf &train_data, VectorXf &labels, VectorXf &testitem) {
    VectorXf weights;
    regress(train_data, labels, weights);
    return (classify(weights, testitem) > 0 ? 1 : 0);
}

static const int N = 30;
static const int M = 10;
// use up to N previous rounds worth of data to predict next round
// train on all previous rounds available
size_t predict(MatrixXf &data, size_t prev_iters, size_t n_participants) {
    MatrixXf newdata(data.rows(), data.cols() + max(N, M));
    newdata << MatrixXf::Zero(data.rows(), max(N, M)), data;

    size_t n_samples = std::min(500ul, prev_iters);
    if (n_samples > (8 * max(N, M))) {
        n_samples -= max(N,M);
    }
    size_t oldest_sample = prev_iters - n_samples;
    MatrixXf train_data(n_samples, N + M + 1);
    VectorXf testitem(N + M + 1);
    VectorXf labels(n_samples);
    VectorXf averages = newdata.colwise().mean();
    size_t n_expected_good = 0;
    for (size_t i = 0; i < n_participants; ++i) {
        for (size_t iter = oldest_sample; iter < prev_iters; ++iter) {
            train_data.row(iter - oldest_sample) << newdata.row(i).segment<N>(iter + max(N, M) - N)
                                  , averages.segment<M>(iter + max(N, M) - M).transpose()
                                  , 1; 
        }
        testitem.transpose() << newdata.row(i).segment<N>(prev_iters + max(N, M) - N)
                  , averages.segment<M>(prev_iters + max(N, M) - M).transpose()
                  , 1;
        labels = data.row(i).segment(oldest_sample, n_samples);
        n_expected_good += predict(train_data, labels, testitem);
    }
    return n_expected_good;
}


void fill(MatrixXf &data, std::string &params) {
    size_t pos = 0, end = params.size();
    size_t i = 0, j = 0;
    while (pos < end) {
        switch (params[pos]) {
            case ',':
                i = 0;
                ++j;
                break;
            case '1':
                data(i,j) = 1;
                ++i;
                break;
            case '0':
                data(i,j) = -1;
                ++i;
                break;
            default:
                std::cerr << "Error in input string, unexpected " << params[pos] << " found." << std::endl;
                std::exit(1);
                break;
        }
        ++pos;
    }
}

int main(int argc, char **argv) {
    using namespace std;

    if (argc == 1) {
        cout << "evil" << endl;
        std::exit(0);
    }

    string params(argv[1]);
    size_t n_prev_iters = count(params.begin(), params.end(), ',') + 1;
    size_t n_participants = find(params.begin(), params.end(), ',') - params.begin();

    MatrixXf data(n_participants, n_prev_iters);
    fill(data, params);

    size_t n_expected_good = predict(data, n_prev_iters, n_participants);

    if (n_expected_good > n_participants/2) {
        cout << "evil" << endl;
    } else {
        cout << "good" << endl;
    }
}

সংকলন করতে

নামক কোনও ফাইলে সোর্স কোডটি সংরক্ষণ করুন ridge_professor.cc, ইগেন লাইব্রেরিটি ডাউনলোড করুন এবং উত্স ফাইল হিসাবে একই ফোল্ডারের ভিতরে থাকা ইগেন ফোল্ডারটি আনজিপ করুন। সঙ্গে সংকলনg++ -I. -O3 -ffast-math -o ridge_professor ridge_professor.cc

চালানোর জন্য

কল করুন ridge_profimar.exe এবং সরবরাহ হিসাবে প্রয়োজন হিসাবে আর্গুমেন্ট।

প্রশ্ন

যেহেতু আমি এখনও কোথাও মন্তব্য করতে পারি না, আমি এখানে জিজ্ঞাসা করব: উইন্ডোতে যুক্তির আকারের সীমাটি কয়েক শতাব্দি ঘুরে পুরো ইতিহাসের সাথে ফলাফল বাইনারিগুলি কল করা অসম্ভব করে না? আমি ভেবেছিলাম আপনার যুক্তিতে 9000 ডলারের বেশি অক্ষর থাকতে পারে না ...


আমার এই দৃষ্টি আকর্ষণ করার জন্য আপনাকে ধন্যবাদ । জাভাতে এটি ইতিমধ্যে ভাল কাজ না করে থাকলে এটি কাজ করার জন্য আমি কিছু উপায় বের করব। জাভা যদি এটি না করতে পারে তবে গবেষণা আমাকে জানায় যে সি ++ করতে পারে, এবং আমি সি ++ পুনরুদ্ধারের সুযোগটি নেব। পরীক্ষার ফলাফল নিয়ে শীঘ্রই ফিরে আসব।
রেইনবোল্ট

দেখা যাচ্ছে যে জাভা কমান্ড প্রম্পটের সীমাবদ্ধতার বিষয় নয়। দেখা যাচ্ছে যে কেবল 32k এর চেয়ে বড় কমান্ডই সমস্যার কারণ হতে পারে। এখানে আমার প্রমাণটি (এটি আমি নিজে লিখেছিলাম): docs.google.com/docament/d/… । আবার, আগামীকাল ট্রায়াল শুরুর আগে আপনি এটি আনার জন্য আমি সত্যিই প্রশংসা করি।
রেনবোল্ট

@ রুশার ইতিমধ্যে 57 টি বট রয়েছে এবং আপনি প্রতিযোগিতায় 1000 রাউন্ড তৈরির পরিকল্পনা করছেন। এটি আপনার স্ট্রিংকে 57 কে অক্ষর তৈরি করবে (অতএব> 32 কে), তাই না?
প্ল্যানাপাস

1
@ রুশার আমার ধারণা আমি আরও এক সপ্তাহের মধ্যে সময়রেখা বাড়িয়ে দেওয়া এবং অংশগ্রহণকারীদের আর্গুমেন্টের স্ট্রিং ব্যবহার না করে স্ট্যান্ডিন পড়তে তাদের প্রোগ্রামগুলি পরিবর্তন করতে বলাই ভাল be তুচ্ছ হবে সবচেয়ে প্রোগ্রাম পরিবর্তন করার জন্য
dgel

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

6

ক্রাউলি

কারণ উইনচেষ্টার্স এই সহযোগী ছাড়া অনেক কম আকর্ষণীয়। তিনি অবশ্যই খারাপের পক্ষে ... যতক্ষণ না এর চেয়ে বড় কোন মন্দ যত্ন নেওয়া দরকার।

package Humans;

public class Crowley extends Human {
public String takeSides(String history) {
    int gd = 0, j=history.length(), comma=0, c=0, z=0;
    while(comma < 2 && j>0)   {
        j--;
        z++;
        if (history.charAt(j) == ',') {
            comma++;
            if(c> z/2) {gd++;}
            z=0;
            c=0;
        } else if (history.charAt(j)=='1') {
            c++;
        } else {
        }
    }
    if(gd == 0){
        return "good";
    } else {
        return "evil";
    }
}}

আমি শেষ দুটি বাঁক (এখনও পর্যন্ত 0 টি কমা এবং এখনও পর্যন্ত 1 টি কমা) দেখছি এবং যদি দু'জনেই খারাপ জয় পেতে দেয় তবে আমি ভাল ভোট দিয়েছি। অন্যথায় আমি খারাপ ভোট।


আমি কি এই অধিকার পেতে পারি? আপনি শেষের দিকে তাকান এবং যদি 50% এরও কম "ভাল" ভোট হয় তবে আপনি "ভাল" এর সাথে অন্যকে মন্দ করবেন? (কৌতূহলের বাইরে: আপনি কি ক্রিপ্টিক পরিবর্তনশীল নাম পছন্দ করেন বা এটি কোনও দুর্ঘটনা?)
অ্যাঞ্জেলো ফুকস

1
@ অ্যাঞ্জেলো নিউশিত্জারকে আমি শেষ দুটি বাঁক (এখন পর্যন্ত 0 টি কমা এবং এখনও পর্যন্ত 1 টি কমা) দেখছি এবং যদি দু'জনেই খারাপ জয় পেতে দেয় তবে আমি ভাল ভোট দিয়েছি। অন্যথায় আমি খারাপ ভোট। আমি ভেরিয়েবলের নামগুলি পছন্দ করি যা সংক্ষেপে সংক্ষেপে সংক্ষিপ্ত থাকে যদি কোডটির উদ্দেশ্য উদ্দেশ্যটি বিভ্রান্ত না হয়। আমি পেশাদার প্রোগ্রামার নই এবং আমি এই প্রথমবারের মতো জাভাতে প্রোগ্রাম করেছি বা .5.৫ বছরে অন্য কেউ কোড দেখেছিল। আমি আমার স্মৃতি সতেজ করার জন্য এটি লিখেছিলাম T (টিএলডিআর তারা আমার কাছে ক্রিপ্টিক নয় এবং আমিই কেবলমাত্র কোড করি))
কেইন

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