টেনিস স্কোর কোড গল্ফ পূরণ


25

মেলবোর্নে ২০১৪ অস্ট্রেলিয়ান ওপেনের আলোকে এবং নভাক জোকোভিচের বিপক্ষে স্ট্যানিস্লাস ওয়াওরিঙ্কার জয়ের জন্য আমি নিম্নলিখিত কোড গল্ফ চ্যালেঞ্জের প্রস্তাব দিই!

এই সিজিসির ভিত্তিতে আবার ওয়াওরিংকা এবং জোকোভিচ রয়েছেন। আপনার চ্যালেঞ্জটি হ'ল 1 এবং 2 এর সমন্বয়ে একটি স্ট্রিং নেওয়া এবং টেনিস স্কোরিং সিস্টেমের ভিত্তিতে টেনিস স্কোরগুলি নির্ধারণ করা। একটি "1" ইঙ্গিত দেয় যে ওয়াওরিঙ্কা একটি পয়েন্ট করেছে, অন্যদিকে "2" ইঙ্গিত দেয় যে জোকোভিচ একটি পয়েন্ট করেছেন।

উদাহরণস্বরূপ: 1211222122111122111একটি দুটি-লাইন আউটপুট উত্পন্ন করবে:

Wawrinka 1 - 40
Djokovic 1 - 30

স্ট্রিংটি যত দীর্ঘ হবে, ততই খেলায় স্কোর।

নিয়মাবলী:

  • সংক্ষিপ্ততম কোড জয়, খাঁটি এবং সহজ simple
  • প্রদর্শিত হলে স্কোরগুলি ডান প্রান্তিককরণ এবং কলামও প্রান্তিক করা উচিত; যেমন
  • আউটপুট নমুনা প্রান্তিককরণ:

    Wawrinka 7 5 3 -  0
    Djokovic 6 7 4 - 15
    
  • যদি কোনও গেম অগ্রগতিতে থাকে তবে স্কোর অবশ্যই সেট স্কোরগুলির পরে প্রদর্শিত হবে। গেম স্কোরগুলি অবশ্যই স্পেস-ড্যাশ-স্পেস বিভাজক সহ সেট স্কোরগুলি অনুসরণ করবে। এটি যদি প্রথম খেলায় ঘটে তবে একটি 0-0 স্কোর অবশ্যই প্রদর্শিত হবে।

    Wawrinka 0 -  0
    Djokovic 0 - 15
    
  • একটি গেম 0, 15, 30, 40 এবং গেম পয়েন্ট অনুসারে চলে যাবে। যদি কোনও গেমটি 40-40 এ পৌঁছায় তবে একটি ডিউস ঘোষণা করা হয় এবং স্কোরটি অবশ্যই পয়েন্ট স্কোর করে প্লেয়ার সারিতে ডিউস প্রদর্শন করতে পারে:

    Wawrinka 7 5 3 - 40
    Djokovic 6 7 4 - 40 Deuce
    
  • যদি কোনও ডিউস পৌঁছে যায়, পরবর্তী পয়েন্টটি পয়েন্ট স্কোর করা প্লেয়ারের পক্ষে সুবিধা হবে:

    Wawrinka 7 5 3 - Ad
    Djokovic 6 7 4 - 40
    

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

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

    Wawrinka 7 5 3 - 40
    Djokovic 6 7 4 - 40 Deuce (2)
    
  • কোনও খেলোয়াড় 6 গেম বা তার বেশি খেলায় পৌঁছায় এবং দুটি গেমের ব্যবধানের সাথে সীসা যেমন eg-৫, 6-৪ ... 9-7 (শেষ রাতের পঞ্চম সেটের ক্ষেত্রে) একটি সেট জিতেছে

  • ধারাবাহিক সেটগুলি অবশ্যই একটি স্থানের সাথে পৃথক করতে হবে।

  • অস্ট্রেলিয়ান ওপেনে টাই বিরতি রয়েছে, সুতরাং 6-- set সেটে পৌঁছালে প্রথম প্লেয়ার দুটি পয়েন্ট ব্যবধানের ব্যবধানে সাত পয়েন্টে পৌঁছে টাইব্রেক প্রতিষ্ঠা করেন। টাই বিরতি প্রদর্শন স্কোয়ার বন্ধনী মধ্যে প্রদর্শিত হয়:

    Wawrinka 7 6 [6]
    Djokovic 6 6 [4]
    

    টাই-ব্রেকের বিজয়ী আগের সেটটি 7--6 জিতেছিল বলে জানা গেছে।

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

  • যদি কোনও খেলোয়াড় তিনটি সেট জিতে থাকে তবে তৃতীয় একটি লাইন প্রদর্শিত হবে Wawrinka winsবা বলছে বা Djokovic winsকে জিতেছে তার উপর নির্ভর করে কোডটি সমাপ্ত হবে।

    Wawrinka 2 6 6 3 9
    Djokovic 6 4 2 6 7
    Wawrinka wins
    
  • যদি স্ট্রিংটি শেষ হয় যে শেষ পয়েন্টটি একটি গেম, সেট বা ম্যাচ জিতেছে, গেমের স্কোর প্রদর্শিত হবে না ...

    Wawrinka 7 5 3
    Djokovic 6 7 4
    
  • যদি স্ট্রিং কোনও ম্যাচ জিতে যাওয়ার বাইরে চলে যায়, তবে স্ট্রিংটির বাকি অংশগুলি অগ্রাহ্য করা হবে, স্কোর প্রদর্শিত হবে এবং বিজয়ী ঘোষিত হবে।


3
আমি সত্যই মনে করি না আমাদের একটি নতুন ট্যাগ দরকার স্পোর্টস ; খেলা ঠিক কাজ করা উচিত।
জাস্টিন

1
এর ফল কী হবে? শুধু শেষ স্কোর বা প্রতিটি পদক্ষেপ?
তেউন প্রংক 8

1
@ টিউনপ্রংক স্কোরের উপর নির্ভর করে ম্যাচটি শেষ হবে কি না। ধারণাটি মনে হচ্ছে: পয়েন্টগুলির স্ট্রিং দেওয়া, বর্তমান স্কোরটি কী।
টিম সেগুইন

1
@ এমসিকে - অস্ট্রেলিয়ান ওপেনের তৃতীয় সেটে আপনি 9-7 এ পৌঁছাতে পারবেন না; টাইব্রেক পঞ্চম বাদে প্রতিটি সেটে প্রয়োগ করা উচিত।
চৌলেট

1
@ ওয়েল ওয়েস্ট আপনি নিজের আগের সম্পাদনা দিয়ে সঠিক ছিলেন; কেবল পঞ্চম সেটে কোনও টাই-ব্রেকার নেই। এটিকে আরও স্পষ্ট করার জন্য আমি আপনার উদাহরণটি স্থির করেছি।
প্রিমো

উত্তর:


5

পার্ল - 424 বাইট

*1=a;*2=b;@1=(Wawrinka,0);@2=(Djokovic,0);
$$_++>${$o=S^$_}&&$$_>3and$1=$2=0,
$w=$w[$_]+=($$_[$.]++>$$o[$.]||(($t=$$_[$.]==$$o[$.])&&!$%&&$.<5))&&
$$_[$.]>5+$%&&!($1[$.]=$2[$.+=!$%]=$w<2&&0,$$_[$.-1]+=$%,$%=$t)for<>=~/./g;
@s=(' 0',15,30,(40)x($e=$$o<3||$$o-2),Ad);
$%and$_="[$_]"for@1[-1],@2[-1];$d[$&]=$1>2&&$1==$2&&' Deuce'.($1>3&&" ($e)");
print"@1",$w<3&&" - $s[$1]$d[1]","\n@2",$w<3&&" - $s[$2]$d[2]",$w>2&&"\n${$&}[0] wins"

পাঠযোগ্যতার অনুভূমিক বিগ্রহের জন্য নিউলাইনগুলি যুক্ত করা হয়েছে ।

অস্ট্রেলিয়ান ওপেনের স্কোরিং অনুসারে এটি একটি সম্পূর্ণ সমাধান বলে আমি বিশ্বাস করি :

  • পাঁচটি সেট সেরা (ওরফে রেস টু তিন)।
  • 1-4 সেটগুলি 6-6 টাই-ব্রেকার হিসাবে খেলানো হয়।
  • 5 সেট একটি সুবিধা সেট হিসাবে খেলা হয়।

পরীক্ষার মামলা


1211222122111122111

Wawrinka 1 - 40
Djokovic 1 - 30

12112221221111221112

Wawrinka 1 - 40
Djokovic 1 - 40 Deuce

121122212211112211122

Wawrinka 1 - 40
Djokovic 1 - Ad

1211222122111122111221

Wawrinka 1 - 40 Deuce (2)
Djokovic 1 - 40

22111111212122221122111212212112121221212211221121222222112112221121121122221122221211111222121222122211212122111212112211222121211212211212211122121211112222222212211121122

Wawrinka 6 [5] - 30
Djokovic 6 [6] - 40

221111112121222211221112122121121212212122112211212222221121122211211211222211222212111112221212221222112121221112121122112221212112122112122111221212111122222222122111211222

Wawrinka 6 0 -  0
Djokovic 7 0 -  0

1122222211121211121211111121111211221222212212112221211222211222112212211121122122212122212222122212212211221111121222111221211111211112222212122122112111212121221221212211112122212211111111112111212222221112212121122212121111122111222222111212221121221111222122122222111212111111221121122111122122111222222121122221112221221122221121211212111122111121212112112121222122

Wawrinka 5 4 6 6 5 - 15
Djokovic 7 6 4 4 6 - 40

11222222111212111212111111211112112212222122121122212112222112221122122111211221222121222122221222122122112211111212221112212111112111122222121221221121112121212212212122111121222122111111111121112122222211122121211222121211111221112222221112122211212211112221221222221112121111112211211221111221221112222221211222211122212211222211212112121111221111212121121121212221222

Wawrinka 5 4 6 6 5
Djokovic 7 6 4 4 7
Djokovic wins

222221112112212212222111222211111111121111121112211221221211212121122211222112111112122122212222211112122212221111121111121211212112112112221221121122121121112221221222122122211222212121212112112111221221121112222212122222221111112222222221221122211221121111221121222222111111122221122111211121222112112122212122221121222221222121212111121221221112111212212222122212212212112111112112112121112221111221221221121222122211221212211111111222222121221112221212

Wawrinka 6 7 6 4 7 - 40
Djokovic 3 5 7 6 8 - Ad

2222211121122122122221112222111111111211111211122112212212112121211222112221121111121221222122222111121222122211111211111212112121121121122212211211221211211122212212221221222112222121212121121121112212211211122222121222222211111122222222212211222112211211112211212222221111111222211221112111212221121121222121222211212222212221212121111212212211121112122122221222122122121121111121121121211122211112212212211212221222112212122111111112222221212211122212122

Wawrinka 6 7 6 4 7 
Djokovic 3 5 7 6 9 
Djokovic wins

সর্বশেষ পরীক্ষার মামলার মধ্যবর্তী সমস্ত স্কোর এখানে দেখা যাবে: http://codepad.org/FzDIcf0W


11-9 কেবল পঞ্চম সেট হিসাবে বৈধ হতে বোঝানো হচ্ছে না?
অস্থিরতা

@ উদ্বোধন আসলে আপনি ঠিক বলেছেন। আমি আপডেট করতে হবে।
প্রিমো

2

ECMAScript 6 - 635 অক্ষর

f=(p,q,C)=>{B='';T=' ';L=(x)=>(B+x).length;M=(x,y)=>x>y?x:y;E=(a)=>{var x=L(a[0]),y=L(a[1]),q=M(x,y);for(;x++<q;)a[0]=T+a[0];for(;y++<q;)a[1]=T+a[1]};E(a=[p,q]);g=[m=n=o=i=t=z=0,0];s=[0,0];S=[0,0];w=2;O=(i)=>a[i]+(n+o>0?T+s[i]:B)+(o>0?(t?' ['+g[i]+']':' - '+[' 0',15,30,40,'Ad'][g[i]]+(z>0&&g[0]+g[1]==6&&i==w?' Deuce'+(z>1?' ('+z+')':B):B)):B)+'\n';while(W=C[i++]){w=--W;++o;if((d=++g[w])>M(t?6:3,(e=g[l=1-w])+1)){g=[o=z=0,0];j=++s[w];k=s[l];t=++n>11;if(j>M(5,m>4||k<6?k+1:6)){E(s);a[0]+=T+s[0];a[1]+=T+s[1];s=[n=0,0];++m;if(++S[w]>2)break}}else if(!t&&d+e>7){--g[w];--g[l];++z}}E(s);E(g);return O(0)+O(1)+(S[w]>2?(w?q:p)+' wins':B)}

মন্তব্য সহ:

// Function f takes arguments:
//   p - Player 1 name
//   q - Player 2 name
//   C - String of 1s and 2s representing points won by players.
f=(p,q,C)=>{
    /* Empty String          */ B='';
    /* Space                 */ T=' ';
    /* String Length Func.   */ L=(x)=>(B+x).length;
    /* Max Function          */ M=(x,y)=>x>y?x:y;
    /* Equalize Length Func. */ E=(a)=>{var x=L(a[0]),y=L(a[1]),q=M(x,y);for(;x++<q;)a[0]=T+a[0];for(;y++<q;)a[1]=T+a[1]};
    /* No. of sets           */ m=0;
    /* No. games in set      */ n=0;
    /* No. points in game    */ o=0;
    /* Input Index           */ i=0;
    /* Output String         */ E(a=[p,q]);
    /* Current Game's Points */ g=[0,0];
    /* Current Set's Games   */ s=[0,0];
    /* No. sets won          */ S=[0,0];
    /* Is a tiebreaker       */ t=0;
    /* No. of deuces         */ z=0;
    /* Current match result  */ w=2;
    /* Output Fnctn  */ O=(i)=>a[i]+(n+o>0?T+s[i]:B)+(o>0?(t?' ['+g[i]+']':' - '+[' 0',15,30,40,'Ad'][g[i]]+(z>0&&g[0]+g[1]==6&&i==w?' Deuce'+(z>1?' ('+z+')':B):B)):B)+'\n';
    while(W=C[i++]){
        w=--W;
        // w - index of winner of current game
        // l - index of loser of current game
        // d - winner of current point's game score
        // e - loser of current point's game score
        ++o;
        if((d=++g[w])>M(t?6:3,(e=g[l=1-w])+1)){ 
            g=[0,0];  // Reset the game score.
            o=z=0;
            j=++s[w]; // j = Increment the winner's set score
            k=s[l];   // k = Loser's set score
            t=++n>11; // Is a tiebreak?
            if(j>M(5,m>4||k<6?k+1:6)){
                E(s);
                a[0]+=T+s[0]; // Add to output
                a[1]+=T+s[1]; // Add to output
                s=[n=0,0];  // Reset current set's no. of games & no. of deuces.
                ++m;        // Increment no. of sets.
                if(++S[w]>2)break;     // Increment winners no. sets won and check if match won.
            }
        }
        else if(!t&&d+e>7){--g[w];--g[l];++z}// Check if deuces increased.
    }
    E(s); // Format sets strings.
    E(g); // Format games strings.
    return O(0)+O(1)+(S[w]>2?(w?q:p)+' wins':B);
}

পরীক্ষামূলক

var tests=[
            '',
            '1',
            '2',
            '11',
            '222',
            '1111',
            '2222',
            '1112221',
            '11122212',
            '121212121',
            '1212121212',
            '1211222122111122111',
            '12112221221111221112',
            '121122212211112211122',
            '1211222122111122111221',
            '1111222211112222111122221111222211112222111122221212121212121212121',
            '11111111111111111111111111111111111111111111111111111111111111111111111',
            '111111111111111111111111111111111111111111111111111111111111111111111111',
            '1111111111111111111111111111111111111111111111111111111111111111111111111'
        ];
for(var ex in tests) console.log('Test '+ex+'\n'+tests[ex]+'\n'+f('Wawrinka','Djokovic',tests[ex]));

পরীক্ষার ফলাফল

Test 0

Wawrinka
Djokovic


Test 1
1
Wawrinka 0 - 15
Djokovic 0 -  0


Test 2
2
Wawrinka 0 -  0
Djokovic 0 - 15


Test 3
11
Wawrinka 0 - 30
Djokovic 0 -  0


Test 4
222
Wawrinka 0 -  0
Djokovic 0 - 40


Test 5
1111
Wawrinka 1
Djokovic 0


Test 6
2222
Wawrinka 0
Djokovic 1


Test 7
1112221
Wawrinka 0 - Ad
Djokovic 0 - 40


Test 8
11122212
Wawrinka 0 - 40
Djokovic 0 - 40 Deuce


Test 9
121212121
Wawrinka 0 - Ad
Djokovic 0 - 40


Test 10
1212121212
Wawrinka 0 - 40
Djokovic 0 - 40 Deuce (2)


Test 11
1211222122111122111
Wawrinka 1 - 40
Djokovic 1 - 30


Test 12
12112221221111221112
Wawrinka 1 - 40
Djokovic 1 - 40


Test 13
121122212211112211122
Wawrinka 1 - 40
Djokovic 1 - Ad

Test 14
1211222122111122111221
Wawrinka 1 - 40 Deuce
Djokovic 1 - 40


Test 15
1111222211112222111122221111222211112222111122221212121212121212121
Wawrinka 6 [10]
Djokovic 6 [ 9]


Test 16
11111111111111111111111111111111111111111111111111111111111111111111111
Wawrinka 6 6 5 - 40
Djokovic 0 0 0 -  0


Test 17
111111111111111111111111111111111111111111111111111111111111111111111111
Wawrinka 6 6 6
Djokovic 0 0 0
Wawrinka wins

Test 18
1111111111111111111111111111111111111111111111111111111111111111111111111
Wawrinka 6 6 6
Djokovic 0 0 0
Wawrinka wins

1

জাভাস্ক্রিপ্ট - 743 বাইট

var b=process.argv[2],c=[0,0],e=[],g=[0,0],h=[0,0],k=["0","15","30","40"],l=["Wawrinka","Djokovic"];function m(a){var d="",f;for(f in e)d+=e[f][a]+" ";3<=c[0]||3<=c[1]||(d+=g[a]+" - ",f=h[a],a=h[(a+1)%2],d=n()?d+("["+f+"]"):3>f||3>a?d+k[f]:f>a?d+"Ad":d+k[3]);return d}function n(){return 6<=g[0]&&6<=g[1]}function p(){var a=q;g[a]++;h=[0,0];7<=g[a]?(e.push(g),g=[0,0],c[a]++):6<=g[a]&&g[a]>g[(a+1)%2]+1&&(e.push(g),g=[0,0],c[a]++)} for(var r in b){var q=parseInt(b[r])-1,s=++h[q];n()?7<=s&&(4>e.length?p():s>h[(q+1)%2]+1&&p()):4<=s&&s>h[(q+1)%2]+1&&p()}console.log(l[0]," ",m(0));console.log(l[1]," ",m(1),n()?"":2<h[0]&&2<h[1]&&h[0]==h[1]?"Deuce"+(3<h[0]?" ("+(h[0]-2)+")":""):"");console.log(3<=c[0]||3<=c[1]?(3<=c[0]?l[0]:l[1])+" wins":"");

ক্লোজার সংকলন ছাড়াই:

var input = process.argv[2];

var score = [0,0];
var match = [];
var set = [0,0];
var game = [0,0];
var gameScore = [ '0', '15', '30', '40' ];
var names = ['Wawrinka', 'Djokovic'];

function printScores(who)
{
    var out = '';
    for (var i in match) {
        out += match[i][who] + ' ';
    }

    if (!isDone()) {
        out += set[who] + ' - ';

        var point = game[who], otherPoint = game[(who+1)%2];

        if (isTieBreaker()) { // Tie breaker
            out += '['+point+']';
        } else {
            if (point < 3 || otherPoint < 3) {
                out += gameScore[point];
            } else if (point > otherPoint) {
                out += 'Ad';
            } else {
                out+= gameScore[3];
            }
        }
    }

    return out;
}

function printDeuce()
{
    if (isTieBreaker()) {
        return '';
    } else {
        return (game[0] > 2 && game[1] > 2 && game[0] == game[1]) ? ('Deuce' + (game[0] > 3 ? ' (' + (game[0] - 2) + ')' : '')) : '';
    }

}

function isDone()
{
    return score[0] >= 3 || score[1] >= 3;
}

function isTieBreaker()
{
    return set[0] >= 6 && set[1] >= 6;
}

function getOther(who)
{
    return (who + 1) % 2;
}

function addPoint(who)
{
    var points = ++game[who];

    if (isTieBreaker()) {
        if (points >= 7) {
            if (match.length < 4) {
                addGame(who);
            } else if (points > (game[getOther(who)]+ 1)) {
                addGame(who);
            }
        }
    } else {
        if (points >= 4 && points > (game[getOther(who)] + 1)) {
            addGame(who);
        }
    }
}

function addGame(who)
{
    set[who]++;
    game = [0,0];

    if (set[who] >= 7) { // Won Tiebreaker
        addSet(who);
    } else if (set[who] >= 6 && set[who] > (set[getOther(who)] + 1)) {
        addSet(who);
    }
}

function addSet(who)
{
    match.push(set);
    set = [0,0];
    score[who]++;
}

// Play game
for(var i in input) {
    addPoint(parseInt(input[i]) - 1);
}

console.log(names[0], ' ', printScores(0));
console.log(names[1], ' ', printScores(1), printDeuce());
console.log(isDone() ? ((score[0] >= 3 ? names[0] : names[1]) + ' wins') : '');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.