बॉलिंग का एक गेम स्कोर करें


25

आपका काम 21 रोल तक के बाद 10-पिन गेंदबाजी के खेल में एक खिलाड़ी के स्कोर को योग और आउटपुट करना है

रोल को आपके पसंदीदा तरीके के इनपुट में पूर्णांकों के अनुक्रम के रूप में दर्शाया जाता है । प्रत्येक पूर्णांक उस पिन की संख्या से मेल खाता है जिसे उस रोल में खटखटाया गया था।

स्कोरिंग

प्रत्येक दौर के बाद उस दौर में खटखटाने वाले पिंस की संख्या को अंतिम स्कोर में गिना जाता है। यदि कोई खिलाड़ी किसी राउंड के पहले रोल में सभी दस पिनों को मारता है, तो यह स्ट्राइक है , और राउंड समाप्त हो गया है। अन्यथा, गोल एक और रोल के लिए रहता है। यदि एक गोल का दूसरा रोल शेष सभी पिनों को नीचे गिराता है, तो यह एक अतिरिक्त है

प्रत्येक स्ट्राइक के लिए दो अगले रोल्स में पिंस के योग के बराबर एक बोनस है । प्रत्येक अतिरिक्त के लिए अगले रोल में नीचे खटखटाने वाले पिंस के अंक के बराबर एक बोनस है।

10 वें और अंतिम दौर में, खिलाड़ी को अतिरिक्त रोल दिए जा सकते हैं: हड़ताल के मामले में, खिलाड़ी को अपनी स्ट्राइक बोनस बनाने के लिए दो और रोल मिलते हैं। एक अतिरिक्त के मामले में, खिलाड़ी को एक और रोल मिलता है।

उदाहरण

Input: 4 3 8 2 7 1 10 7 3 0 10 2 2 10 10 5 4
Output: 131

Input: 10 10 9 1 7 3 2 7 10 1 9 10 7 1 10 10 10
Output: 183

नियम

  • आप मान सकते हैं कि इनपुट वैध है।
  • मीगो की टिप्पणी के अनुसार मैंने हमारे वर्तमान मानक को पूरा करने के लिए इनपुट / आउटपुट विधियों की आवश्यकताओं को ढीला कर दिया है ।
  • उन भाषाओं में उत्तर जो चुनौती से नए हैं, अनुमति है
  • सबसे छोटा कोड जीतता है!

क्या मुझे सही से याद है कि बोनस स्टैक नहीं है?
टाइटस

@ टिट्स मुझे यकीन नहीं है कि आपका क्या मतलब है, लेकिन नहीं, बोनस "स्टैक" नहीं है, यानी, एक हड़ताल के लिए आप दो अगले रोल में नीचे पिन किए जाने वाले पिंस की संख्या जोड़ते हैं , चाहे वे स्ट्राइक हों। या नहीं। एक स्ट्राइक के लिए अधिकतम स्कोर 30 अंक है, और एक पूरे गेम के लिए अधिकतम 300 है।
डानिएरो

क्या अलग कमांड लाइन तर्क के रूप में योग्य हैं space separated integers?
टाइटस

1
@ यकीन है। यह एक पुरानी पोस्ट है - स्वीकार्य इनपुट विधियों पर आज की आम सहमति इस बिंदु पर स्थापित नहीं की गई थी। वास्तव में, मैं अब यह नहीं देखता कि आज का मानक इस पर क्यों लागू नहीं होना चाहिए (फ़ंक्शन मापदंडों आदि सहित), हालांकि मैं चुनौती के नियमों को रेट्रो रूप से बदलने का प्रशंसक नहीं हूं।
डानिएरो

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

जवाबों:


6

गोल्फस्क्रिप्ट, 50 41 वर्ण

~0]-1%~0{\.9>{+1$3$}{@+.9>3$*}if++}10*p];

गोल्फस्क्रिप्ट में एक और प्रयास ( इसे ऑनलाइन चलाएं )।

कोड का स्पष्टीकरण इस प्रकार है। समाधान समस्या की स्टैक प्रकृति का उपयोग करता है (एक के बाद एक रोल का उपभोग करता है) लेकिन इसलिए इनपुट को उल्टा करना पड़ता है।

~0          # Take the input and evaluate to single numbers on the stack. Add zero.
]-1%~       # Reverse the stack (make array, reverse array, dump array)

0           # Start with a sum of zero
{           # Perform this block 10 times (once for each round)
  \         #   Take the next roll
  .9>{      #   If it is a strike
    +       #     Add the value of the roll to the sum
    1$3$    #     and duplicate top two members of the stack (i.e. next two rolls).
  }{        #   ... else ...
    @+      #     Take the next roll and add with first roll in round.
    .9>     #     Does this sum show a spare?
    3$*     #     Get next roll (potential bonus) and multiply with yes/no.
            #     Since we pushed an additional 0 in the beginning 
            #     there is a spare roll even for the last round.
  }if       #   endif
  ++        #   Add top three stack entries together
            #   (i.e. sum+2 bonus rolls for strike, sum+rolls+bonus else)
}10*        # Loop ten times

p];         # Sum is top of stack. Print sum and discard any leftover rolls.

पुराना वर्जन:

~].1>.1>]zip{((.10<{@(0=@+@1>1$9><}*@}10*;]{+}.@**

5

अजगर, ११६ ११० १०५ १०३ १०० ९९ पात्र

z=map(int,raw_input().split())
s=0
exec('s+=sum(z[:2+(z[0]+z[1]>9)]);z=z[2-(z[0]>9):];'*10)

इनपुट पर 30 अक्षर खर्च करना विडंबनापूर्ण है। सुझाव का स्वागत करते हैं।

सुधार के लिए हावर्ड का बहुत धन्यवाद।


आप की जगह ले सकती 1+(z[i]!=10)साथ 2-(z[i]>9)एक चार को बचाने के लिए।
हॉवर्ड

@ हावर्ड: उत्कृष्ट सुझाव। मैंने इसे अपने उत्तर में शामिल कर लिया है। इसने दो पात्रों को बचाया।
स्टीवन रूंबल्स्की

और दो और अगर आप iपूरी तरह से हटा दें (0 पर सेट करें) और i+=...उपयोग के बजायz=z[2-(z[0]>9)::];
हॉवर्ड

@ हॉवर्ड: एक बार फिर धन्यवाद। तीन पात्रों को बचाया।
स्टीवन रूंबल्स्की

I / O के लिए मानक आम तौर पर अधिक लचीले होते हैं इसलिए अब z=input()ठीक होना चाहिए (प्रभावी रूप से ints की सूची का एक स्ट्रिंग प्रतिनिधित्व ले रहा है और evalइसे अंतर्ग्रहण कर रहा है)। हालाँकि पूर्ण कार्यक्रम कहीं न कहीं आउटपुट होना चाहिए (मुझे लगता है कि यह मामला तब भी वापस था)। जैसा कि मेरा मानना ​​है कि इसे इस 78 बाइट कार्यक्रम में
जोनाथन एलन

4

आर, 101 बाइट्स

मुझे यकीन नहीं है कि यह चुनौती क्यों टकरा रही थी, लेकिन मुझे यह पसंद है, इसलिए मैं देर से ही जवाब दूंगा।

f=function(x,s=0,c=10)`if`(c&length(x),f(x[-(0:(x[1]!=10)+1)],sum(x[1:(2+(sum(x[1:2])>9))])+s,c-1),s)

इसे ऑनलाइन आज़माएं!

Ungolfed:

f <- function(throws, score = 0, count = 10){
  if(count != 0 & length(throws) != 0){
    IsStrike <- throws[1] == 10
    IsStrikeOrSpare <- sum(throws[1:2]) >= 10
    f(throws[-c(1, 2 * !IsStrike)],
      score + sum(throws[c(1:(2 + IsStrikeOrSpare))]),
      count - 1)
  } else {
    return(score)
  }
}

पुनरावर्ती कार्य। xइनपुट के रूप में लेता है , जो स्कोर रखता है। Initialises sकोर औरc फेंके गए राउंड की मात्रा को गिनता है।

यदि विवरण की जाँच करें कि क्या 10 राउंड फेंके गए हैं, या यदि x खाली है। यदि ऐसा है, तो स्कोर वापस आ जाता है। इस प्रकार फ़ंक्शन स्वयं को निम्न प्रकार से कॉल करेगा:

यह थ्रो को हटा देता है x, जाँच करके कि यह स्ट्राइक है या नहीं। यदि ऐसा है, तो पहली प्रविष्टि हटा दी जाती है, पहले दो। (S=x[1]!=10)हमलों के लिए जाँच करता है। हम हटाते हैं ( -) सूचकांक 0:S, जहां S1 है अगर यह हड़ताल है, और 0 नहीं तो। और फिर हम एक जोड़ते हैं -(0:(x[1]!=10)+1):। हम छोटा पास करते हैंx अगले कॉल को कर देते हैं।

स्कोर के लिए, यह x[1:2]एक नियमित मोड़ है, और x[1:3]यदि यह एक स्ट्राइक या एक अतिरिक्त है , तो यह पाया जाता है। हम जाँचते हैं कि sum(x[1:2])क्या 10 से बड़ा या बराबर है। अगर यह हड़ताल है, तो जाहिर है कि यह मामला है। यदि यह एक अतिरिक्त है, तो यह भी काम करता है। तो अगर यह सच है, तो हम x[3]योग में जोड़ते हैं । इसके बाद इसे जोड़ा जाता है s


1

कॉफीस्क्रिप्ट ( 234 215 170)

z=(a)->b=(Number i for i in a.split(' ').reverse());t=0;(r=b.pop();l=b.length;if(9<r)then(t+=r;t+=b[l-1]+b[l-2];)else(f=r+b.pop();t+=f;(t+=b[l-2])if 9<f))for i in[0..9];t

संपादित करें : एक भारी फिर से लिखना, बेशर्मी से हावर्ड के महान स्टैक-आधारित दृष्टिकोण को ख़त्म करना। मुझे विश्वास है कि इसे नष्ट किए बिना किसी सरणी के अंतिम तत्व तक पहुंचने के लिए अधिक छीन लिया जा सकता है ...


1

रूबी, 252 बाइट्स

एक सरणी में इनपुट स्वीकार करता है सभी तत्वों को पहले जोड़ते हैं, फिर स्पेयर और स्ट्राइक बोनस की खोज करते हैं

s,p,t,r=0,0,1,1
o=ARGV
o.each_with_index do |m,n|
y=m.to_i
s+=y
if r<10
p+=y
if p==10&&t==1
r,p=(r+1),0
s+=o[n+1].to_i+o[n+2].to_i
elsif p<10&&t==1
t=2
elsif p<10&&t==2
t,p,r=1,0,(r+1)
elsif p==10&&t==2
t,p,r=1,0,(r+1)
s+=o[n+1].to_i
end end end
puts s

1

PHP, 82 बाइट्स

for($a=$argv;$r++<10;$i+=$p<10)$s+=(9<$q=$a[++$i+1]+$p=$a[$i])*$a[$i+2]+$q;echo$s;

कमांड लाइन तर्कों से इनपुट लेता है; इसे ऑनलाइन चलाएं -nrया परीक्षण करें

टूट - फूट

for($a=$argv;       # import arguments
    $r++<10;        # loop through rounds
    $i+=$p<10)          # 6. if no strike, increment throw count again
    $s+=(9<
        $q=$a[++$i+1]+  # 1. increment throw count  2. $q=second throw plus
        $p=$a[$i]       # 3. $p=first throw
        )*$a[$i+2]      # 4. if $q>9 (strike or spare), add third throw to sum
    +$q;                # 5. add first and second throw to sum
echo$s;             # print sum


1

जेली ,  36  35 बाइट्स

+\µi©⁵+Ị$ḂḤị;®×Ị¤¡-
;0Ç3ƤFṣ-m€2Fḣ⁵S

एक मोनडिक लिंक पूर्णांक की एक सूची को स्वीकार करता है और एक पूर्णांक लौटाता है।

इसे ऑनलाइन आज़माएं!

कैसे?

तीन कटोरे के प्रत्येक अतिव्यापी रन के स्कोर की गणना करता है जैसे कि यह एक था जो एक फ्रेम की शुरुआत में शुरू हुआ था और वैकल्पिक रूप से एक हड़ताल पहचानकर्ता को जोड़ता है (-1 ) , इस परिणामी सूची को समतल करता है, इसे स्ट्राइक आइडेंटिफ़ायर पर विभाजित करता है, फिर हर दूसरे परिणाम से अलग करता है। प्रत्येक चंक (उन रनों के स्कोर को हटाना जो वास्तव में एक फ्रेम की शुरुआत के साथ शुरू नहीं हुए थे)।

अंतिम फ्रेम के लिए पूरा करने के लिए एक शून्य को पहले इनपुट में जोड़ा जाता है (3-वार स्लाइसिंग करने के लिए एक फ्रेम को शुरू करने की अनुमति देने के लिए जो कि पांडुलिपि कटोरा था) और परिणामी स्कोर पहले दस (अब निकालने के लिए) को काट दिया जाता है संभव फर्जी 11 वीं फ्रेम) उन्हें संक्षेप में प्रस्तुत करने से पहले।

+\µi©⁵+Ị$ḂḤị;®×Ị¤¡- - Link 1, threeBowlEvaluate: list, bowlScores
                    -               e.g. [0,4,6]   [9,1,10]   [0,4,4]  [10,7,9]
 \                  - cumulative reduce with:
+                   -   addition         [0,4,10]  [9,10,20]  [0,4,8]  [10,17,26]
  µ                 - monadic chain separation, call that "left"
     ⁵              - literal ten        10        10         10       10
   i                - first index in left 3         2 (spare)  0        1 (strike)
    ©               - (copy to register for later reuse)
        $           - last two links as a monad (f(x)):
       Ị            -   abs(x) <= 1       0         0          1        1
      +             -   add x             3         2          1        2
         Ḃ          - modulo by 2         1         0          1        0
          Ḥ         - double              2         0          2        0
           ị        - index into left (both 1-indexed and modular)
                    -            ...      4        20          4       26
                  - - literal -1         -1        -1         -1       -1
                 ¡  - repeat:
            ;       - ...action: concatenate
                ¤   - ...number of times: nilad followed by link(s) as a nilad:
             ®      -   z from register   3         2          0        1
               Ị    -   abs(z) <= 1       0         0          1        1
              ×     -   multiply          0         0          0        1 (strike)
                    - ...yielding:        4         20         4        [26,-1]

;0Ç3ƤFṣ-m€2Fḣ⁵S - Main link: list bowlValues
                -                    e.g. [4,3,8,2,7,1,10,7,3,0,10,2,2,10,10,5,4]
 0              - literal zero            0
;               - concatenate             [4,3,8,2,7,1,10,7,3,0,10,2,2,10,10,5,4,0]
   3Ƥ           - for infixes of length 3:
  Ç             -   last link (1) as a monad
                -                         [7,11,17,9,8,11,[20,-1],10,3,12,[14,-1],4,12,[25,-1],[19,-1],9]
     F          - flatten                 [7,11,17,9,8,11,20,-1,10,3,12,14,-1,4,12,25,-1,19,-1,9]
       -        - literal -1              -1
      ṣ         - split at                [[7,11,17,9,8,11,20],[10,3,12,14],[4,12,25],[19],[9]]
          2     - literal two             2
        m€      - modulo slice for €ach   [[7,17,8,20],[10,12],[4,25],[19],[9]]
           F    - flatten                 [7,17,8,20,10,12,4,25,19,9]
             ⁵  - literal ten             10
            ḣ   - head to index           [7,17,8,20,10,12,4,25,19,9] (no effect this time)
              S - sum                     131

0

पर्ल, 140?

पहला प्रयास:

#!/usr/bin/perl
# usage: ./bowling.pl [list of scores]

@A=@ARGV;{last if(9<$n++);$a=shift@A;$S+=$a;($S+=$A[0]+$A[1])&redo if($a==10);$b=shift@A;$S+=$b;($S+=$A[0])&redo if(10==$a+$b);redo}print$S

अफसोस की बात है कि कुछ मामले ऐसे हैं, जहां यह विफल हो जाता है। मैं बाद में आकर इसे फिर से तैयार करूंगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.