टेनिस स्कोर कोड गोल्फ से मिलता है


25

मेलबोर्न में 2014 के ऑस्ट्रेलियन ओपन के प्रकाश में, और नोवाक जोकोविच के खिलाफ स्टानिस्लास वावरिंका द्वारा जीत, मैं निम्नलिखित कोड गोल्फ चुनौती का प्रस्ताव देता हूं!

वावरिंका और जोकोविच फिर से इस सीजीसी के आधार पर हैं। आपकी चुनौती 1 और 2 से मिलकर एक स्ट्रिंग लेना है और टेनिस स्कोरिंग प्रणाली के आधार पर टेनिस स्कोर निर्धारित करना है। एक "1" इंगित करता है कि वावरिंका ने एक बिंदु बनाया है, जबकि एक "2" इंगित करता है कि जोकोविच ने एक बिंदु बनाया है।

उदाहरण के लिए: 1211222122111122111एक दो-लाइन आउटपुट उत्पन्न करेगा:

Wawrinka 1 - 40
Djokovic 1 - 30

लंबे समय तक स्ट्रिंग, खेल में आगे स्कोर है।

नियम:

  • सबसे छोटा कोड जीतता है, शुद्ध और सरल।
  • प्रदर्शित किए जाने वाले स्कोर को सही संरेखित किया जाना चाहिए और स्तंभ संरेखित भी होना चाहिए; जैसे
  • उत्पादन का नमूना संरेखण:

    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 गेम या उससे अधिक और लीड में दो गेम मार्जिन के साथ जीता है, जैसे 7-5, 6-4 ... 9-7 (पिछली रात के पांचवें सेट के मामले में)

  • लगातार सेट को एक स्थान के साथ अलग किया जाना चाहिए।

  • ऑस्ट्रेलियन ओपन में टाई ब्रेक होते हैं, इसलिए यदि 6-6 सेट तक पहुंच जाता है, तो टाई ब्रेक पहले खिलाड़ी द्वारा दो अंक मार्जिन लीड के साथ सात अंक तक पहुंच जाता है। टाई ब्रेक का प्रदर्शन निम्नानुसार वर्ग कोष्ठक में दिखाया गया है:

    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
परिणाम क्या होगा? बस अंत स्कोर या रास्ते में हर कदम?
त्यूं प्रैंक

1
@TeunPronk स्कोर के आधार पर, मैच समाप्त होगा या नहीं। यह विचार प्रतीत होता है: अंकों के तार को देखते हुए, वर्तमान स्कोर क्या है।
टिम सेगिन

1
@ मैकके - आपको ऑस्ट्रेलियाई ओपन के तीसरे सेट में 9-7 तक पहुंचने में सक्षम नहीं होना चाहिए; टाईब्रेक को पांचवें को छोड़कर हर सेट में लागू होना चाहिए।
चॉलेट

1
@ आप अपने पिछले संपादन के साथ सही थे; केवल पाँचवें सेट में कोई टाई-ब्रेकर नहीं है। मैंने इसे और अधिक स्पष्ट करने के लिए आपका उदाहरण निर्धारित किया है।
Primo

जवाबों:


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 का मतलब केवल पांचवें सेट के रूप में मान्य होना नहीं है?
अस्थिरता

@ वास्तव में, आप सही थे। मुझे अपडेट करना होगा।
Primo

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') : '');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.