Yahtzee का एक गेम स्कोर करें


12

याहत्ज़ी स्कोरशीट की 13 पंक्तियों में से प्रत्येक के लिए आपको (स्टडिन से) 5 नंबर (पासा) की एक अलग सूची दी गई है। आपका काम प्रत्येक पंक्ति के लिए स्कोर की गणना करना और खेल के ग्रैंड टोटल का उत्पादन करना है

उदाहरण

इनपुट और इसकी व्याख्या कैसे करें:

Input       Box              Score
6 1 4 1 3   Aces              2
3 2 2 1 2   Twos              6
6 3 2 3 3   Threes            9
4 2 3 6 5   Fours             4  
6 3 5 5 1   Fives            10
1 5 6 5 6   Sixes            12
            Bonus             -
4 2 4 4 1   3 of a kind      15
2 2 3 2 4   4 of a kind       -
3 2 2 2 3   Full house       25  
1 3 1 6 1   Small straight    -
2 5 4 6 3   Large straight   40
2 2 2 2 2   Yahtzee          50
5 5 4 5 2   Chance           21
            Grand Total     194

हम याहटज़ी बोनस और जोकर नियमों की अवहेलना करेंगे , और केवल ऊपरी और निचले खंड और ऊपरी खंड में बोनस का योग करेंगे। यदि संदेह है, तो इन नियमों का संदर्भ लें ।

सबसे छोटी कोड जीत हो सकती है!


उन लोगों के लाभ के लिए जो नॉर्वेजियन नहीं बोलते हैं, क्या आप उन स्कोरिंग नियमों को सूचीबद्ध कर सकते हैं जो आप चाहते हैं कि लोग सीधे प्रश्न में लागू करें?
पीटर टेलर

हेह हे;) नियम समान हैं, यह केवल कुछ ब्लॉकों में से हैं जिन्होंने स्थिति को बदल दिया है, और 1 और 2 जोड़ी के अलावा। पहला कोड-ब्लॉक किसी न किसी अनुवाद ("सुम" और "बोनस" के बिना) है, इसलिए केवल उसी का संदर्भ लें। नॉर्वेजियन लिंक सिर्फ उन लोगों के लिए ब्लॉक के आदेश को सही ठहराने के लिए था, जिन्हें अन्य सेटअप के लिए इस्तेमाल किया जा सकता है। मुझे लगता है कि नियम स्पष्ट हैं, और यह कि "जोड़ी" ब्लॉक बहुत आत्म-व्याख्यात्मक हैं। बाकी नियमों को मेरे द्वारा प्रदान की गई अंग्रेजी विकि लिंक पर समझाया जाना चाहिए।
डेनियरो

ओह, मैं सिर्फ एहसास हुआ, नियम हैं अलग। मैं तब आधिकारिक, "अंतर्राष्ट्रीय" नियमों का उपयोग करूंगा : yahtzeerules.com/yahtzee-scoring.htm (मैं नॉर्वेजियन लोगों की तरह बेहतर हूं, इसके संभावित स्कोर में अधिक विविधताएं हैं) - मैं एक पल में प्रश्न बदल दूंगा।
डेनियरो

आप वास्तव में स्कोरिंग लाइन को इनपुट कार्ड से मिलान करने जा रहे हैं? क्या हमें यह पता नहीं लगाना चाहिए कि किसी भी हाथ के लिए कौन सी रेखा सबसे उपयुक्त है?
डेविड

1
@ मैट एक निश्चित खोज इंजन से कुछ शीर्ष परिणामों के माध्यम से स्किमिंग के बाद, मैं 'हाँ' कहूँगा।
डेनियरो

जवाबों:


4

एपीएल (124)

S←{⍺∊+⌿⍵∘.=⍵}⋄+/(+/⎕)(50×∧/,A∘.=A←⎕)(+/10×{⍵×∨/(⍳⍵)⍷1+A-⊃A←A[⍋A←⎕]}¨N)(25×∧/S∘⎕¨2 3)(+/{(+/A)×⍵S⊢A←⎕}¨N←3 4)(+/{+/⍵×⍵=⎕}¨⍳6)

4
मैं कसम खाता हूँ कि मैं एक विदेशी अंतरिक्ष यान के किनारे पर पढ़ी गई चीज़ के समान दिखता हूँ।
केविन इलियट

मुझे नहीं पता कि यह कार्यक्रम काम करता है या नहीं, लेकिन निश्चित रूप से यह सबसे छोटा है: D
daniero

5

आर - 264

S=sum;
P=prod;
T=function(i)table(x[i,]);
Z=function(i,...)any(sapply(list(...),function(y)all(y%in%x[i,])))
S((x[1:6,]==(R=row(x[1:6,])))*R)+ # Upper section
S(x[7,])*any(T(7)>2)+             # 3 of a kind
S(x[8,])*any(T(8)>3)+             # 4 of a kind
25*(P(T(9))%in%5:6)+              # Full house
30*Z(10,1:4,2:5,3:6)+             # Small straight
40*Z(11,1:5,2:6)+                 # Large straight
50*(P(T(12))==5)+                 # Yahtzee
S(x[13,])                         # Chance

(264 वर्ण जब टिप्पणियों को छोड़कर)

इनपुट के साथ

x <- as.matrix(read.table("http://pastebin.com/raw.php?i=ZRMC9B4x"))

उत्पादन

[1] 194

यह देखकर अच्छा लगा कि कोई व्यक्ति सही आउटपुट प्राप्त करने का प्रबंधन करता है: D मैं उदाहरण को अपडेट करूंगा।
डेनियरो

मुझे लगता है कि आपका कार्यक्रम गलत तरीके से पूरा घर संभालता है। मैंने पासा का परीक्षण किया 2 2 2 2 2और मेरा मानना ​​है कि आपका कार्यक्रम एक पूर्ण सदन के रूप में व्यवहार करता है और 25 अंक प्रदान करता है।
मैट

मुझे लगता है कि बड़ी और छोटी पट्टियों के साथ भी एक समस्या है। यदि सभी पासा समान हैं (मैंने फिर से परीक्षण किया 2 2 2 2 2) तो मुझे numeric(0)एक अंक के बजाय एक परिणाम मिलता है ।
मैट

@ मैट, जहां मैं (मेरे नियम या हर किसी के?) से आता हूं, आप 2 2 2 2 2" हाउसहोल्ड " के तहत एक यजेटी (जैसे ) स्कोर कर सकते हैं । मुझे लगता है कि आप पट्टियों के बारे में सही हैं, धन्यवाद; मैं अपने कोड को उस छोटे संस्करण के साथ अपडेट करूंगा जिसके बारे में मैंने सोचा था।
फ्लोडेल 12

4

अजगर 364

S=sum;R=range;D=[map(int,raw_input().split())for i in R(13)];s=S(x for i in R(6)for x in D[i]if x==i+1)
for i in R(2):d=D[6+i];s+=[0,S(d)][max(map(d.count,d))>2+i];d=sorted(set(D[9+i]));s+=[0,30+i*10]['1, 1, 1'+', 1'*i in`[d[x+1]-d[x]for x in R(len(d)-1)]`]
e=D[8];a=map(e.count,e);d=D[11];print s+S(D[12])+[0,50][d.count(d[0])==5]+[0,25][2in a and 3in a or 5in a]

अनुरोध के अनुसार, इनपुट स्टड पर है:

$ yScore.py < dice.txt
194

यदि डेटा को एक सूची में पहले से लोड किया जा सकता है, जैसा कि कुछ अन्य समाधानों ने किया है, तो मैं 62 पात्रों को 302 पर निकाल सकता हूं।


3

गणितज्ञ 359

y = IntegerDigits@ImportString[x, "Table"][[1]];
l = Length; g = Gather; r = Range; b = SortBy; h = l@b[g[y[[#]]], l][[-1]] &;
Tr@Flatten@{# Count[y[[#]], #] & /@ r@6, If[h@7 == 3, 15, 0], 
If[h@8 == 4, 20, 0], If[(l /@ b[g[y[[9]]], l]) == {2, 3}, 25, 0], 
If[MatchQ[Sort@y[[10]], {___, n_, m_, o_, q_, ___} /; m == n + 1 && o == m + 1 && q == o + 1], 30, 0], 
If[Sort[y[[11]]] == r[y[[11, 1]], y[[11, 1]] + 4], 40, 0], 
If[l@g[y[[12]]] == 1, 50, 0], y[[13]]}

शॉर्ट स्ट्रेट के लिए जाँच करने के लिए अधिक कुशल तरीका होना चाहिए।


1

गोल्फस्क्रिप्ट 180

n/{~]}%6,{)`['{''=},,''*']*}%[{.{+}*\{..|{'{'\'=},,'++1$\~}%$\;}:g~)\;2>*}{.{+}*\g)\;3>*}{g[2 3]=25*}{$:§;3,{).4+,\>§-}%1?)!!30*}{.$(\;.5+,\>\-!40*}{g)\;5=50*}{{+}*}]+]zip{~~}%{+}*

आप यहां कार्यक्रम का परीक्षण कर सकते हैं

एनोटेट कार्यक्रम:

n/                          # split input by newline
{~]}%                       # parse an int array from each line

6,{)`['{''=},,''*']*}%      # create {X=},,X* code blocks, 
                            # where X goes from 1 to 6 
                            # (needed for processing the first 
                            # half of the board)

[       # create an array of code blocks, for scoring:

        # three of a kind:
    {.{+}*\{..|{'{'\'=},,'++1$\~}%$\;}:g~)\;2>*}

        # four of a kind:
    {.{+}*\g)\;3>*}

        # full house:
    {g[2 3]=25*}

        # small straight:
    {$:§;3,{).4+,\>§-!}%1?)!!30*}

        # straight: 
    {.$(\;.5+,\>\-!40*}

        # yahtzee:
    {g)\;5=50*}

        #chance:
    {{+}*}
]+              # concatenate the 1-6 code block array with this one

]zip            # distribute each line in the input 
                # to the corresponding scoring rule (code block)

{~~}%           # evaluate each input/code pair
                # and get an array with score for each hand

{+}*            # sum up the partial scores.

1

पर्ल 527 अक्षर

while(<>){$l++;$q=$c=0;$q=1if(($_=~/1/&&$_=~/2/&&$_=~/3/&&$_=~/4/)||($_=~/5/&&$_=~/2/&&$_=~/3/&&$_=~/4/)||($_=~/5/&&$_=~/6/&&$_=~/3/&&$_=~/4/));@a=split//;for(@a){$c++if/$l/;}$s+=$l*($c)if$l<7;$s+=35if$s>=63&&$l==6;for$i(1...6){$t=0;$f+=$c if($l==9&&($c==2||$c==3));$c=0if!($l==11&&$c>1);for(@a){$t+=$_;$c++if/$i/;}$s+=$t if($c>=3&&$l==7);$s+=$t if($c>=4&&$l==8);$s+=50if($c==5&&$l==12);$s+=$t if($l==13&&$i==6);}$s+=25if($f==5&&$l==9);$s+=30if($q==1&&$l==10);$s+=40if($c<2&&($t==15||$t==20)&&$l==11);exit(print $s)if($l==13);}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.