বোলিং একটি খেলা স্কোর


25

আপনার টাস্কটি 21 রোল পর্যন্ত 10 পিনের বোলিংয়ের খেলায় একটি খেলোয়াড়ের স্কোর যোগ এবং আউটপুট করা

রোলগুলি আপনার পছন্দসই ইনপুট পদ্ধতিতে পূর্ণসংখ্যার ক্রম হিসাবে উপস্থাপিত হয় । প্রতিটি পূর্ণসংখ্যার সেই রোলটিতে ছিটকে যাওয়া পিনের সংখ্যার সাথে মিলে যায়।

স্কোরিং

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

প্রতিটি ধর্মঘটের জন্য পরবর্তী দুটি রোলগুলিতে ছিটকে পিনের যোগফলের সমান বোনাস রয়েছে । প্রতিটি অতিরিক্ত জন্য পরের রোলটিতে ছিটকে যাওয়া পিনের সংখ্যার সমান বোনাস রয়েছে।

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

উদাহরণ

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

বিধি

  • আপনি ধরে নিতে পারেন যে ইনপুটটি বৈধ।
  • মেগোর মন্তব্য অনুসারে আমি আমাদের বর্তমান মানটি পূরণের জন্য ইনপুট / আউটপুট পদ্ধতির প্রয়োজনীয়তাগুলি ooিলা করেছি ।
  • চ্যালেঞ্জের চেয়ে নতুন যে ভাষাগুলিতে উত্তরগুলি অনুমোদিত
  • সবচেয়ে কম কোড জয়!

আমি কি সঠিকভাবে মনে রাখতে পারি যে বোনাসগুলি স্ট্যাক নয়?
তিতাস

@ টিটাস আপনার অর্থ কী তা আমি ঠিক নিশ্চিত নই, তবে না, বোনাসগুলি "স্ট্যাক" করে না, অর্থাত্ একটি ধর্মঘটের জন্য আপনি পরবর্তী দুটি রোলগুলিতে ছিটকে যাওয়া পিনের সংখ্যা যুক্ত করেন , তা স্ট্রাইক কিনা তা নির্বিশেষে add অথবা না. সুতরাং একটি ধর্মঘটের জন্য সর্বোচ্চ স্কোর 30 পয়েন্ট, এবং পুরো গেমের জন্য সর্বোচ্চ 300।
দানিরো

স্বতন্ত্র কমান্ড লাইন আর্গুমেন্ট হিসাবে space separated integersকি যোগ্যতা অর্জন করে ?
তিতাস

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

1
@ ডানিরো সাধারণ পরামর্শ হ'ল আধুনিক মানগুলির সাথে মানিয়ে নেওয়ার নিয়মগুলি ooিলা করার পক্ষে এটি গ্রহণযোগ্য, যতক্ষণ না এটি চ্যালেঞ্জটিকে কঠোরভাবে পরিবর্তন না করে।
মেগো

উত্তর:


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

পাইথন, 116 110 105 103 100 99 টি অক্ষর

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()হওয়া উচিত (কার্যকরভাবে একটি তালিকার স্ট্রিং উপস্থাপনা নেওয়া intএবং 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ইনপুট হিসাবে গ্রহণ করে যা স্কোরগুলি ধারণ করে। শুরুsকোরগুলি এবং cনিক্ষেপ করা রাউন্ডগুলির পরিমাণ ounts

If স্টেটমেন্টটি 10 ​​রাউন্ড নিক্ষেপ করা হয়েছে কিনা তা যাচাই করে বা যদি x তা খালি করে তা পরীক্ষা করে। যদি এটি হয় তবে স্কোরটি ফিরে আসবে। অন্যথায় ফাংশন নীচে হিসাবে নিজেকে কল করবে:

এটি থ্রোকে সরিয়ে দেয় x, এটি স্ট্রাইক কিনা তা যাচাই করে। যদি তা হয় তবে প্রথম এন্ট্রি সরানো হবে, অন্যথায় প্রথম দুটি। (S=x[1]!=10)ধর্মঘটের জন্য চেক। আমরা ( -) সূচকটি সরিয়েছি, এটি হরতাল হলে 1 0:Sযেখানে Sএবং যদি 0 হয় না। এবং তারপর আমরা এক যোগ করুন: -(0:(x[1]!=10)+1)। আমরা xপরবর্তী কলটিতে সংক্ষিপ্তটি পাস করি ।

স্কোর হিসাবে, x[1:2]এটি নিয়মিত পালা হয় কিনা তা গ্রহণ করে এবং x[1:3]এটি যদি ধর্মঘট বা অতিরিক্ত হয় by আমরা sum(x[1:2])10 এর চেয়ে বড় বা সমান কিনা তা পরীক্ষা করি it এটি যদি ধর্মঘট হয় তবে স্পষ্টতই এটি ক্ষেত্রে। যদি এটি অতিরিক্ত হয়, তবে এটি কাজ করে। সুতরাং এটি যদি সত্য হয় তবে আমরা 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

পিএইচপি, 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

একটি মোনাডিক লিঙ্ক পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে এবং পূর্ণসংখ্যা ফেরত দেয়।

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

তিনটি বাটিতে প্রতিটি ওভারল্যাপিং রানের স্কোর গণনা করে যেন এটি ফ্রেমের শুরুতে শুরু হয়েছিল এবং andচ্ছিকভাবে স্ট্রাইক আইডেন্টিফায়ার সংযোজন করেছে (-1 ) সংযোজন করে, ফলস্বরূপ এই তালিকাটি সমতল করে, স্ট্রাইক আইডেন্টিফায়ারকে আলাদা করে দেয়, তারপরে প্রতিটি দ্বিতীয় ফলাফল বাতিল করে দেয় প্রতিটি খণ্ড (runs রানের স্কোরগুলি সরিয়ে ফেলা যা কোনও ফ্রেম শুরুর সাথে সত্যিই শুরু হয় না)।

চূড়ান্ত ফ্রেমটি পূরণের জন্য প্রথমে শূন্যকে ইনপুটটিতে সংযুক্ত করা হয় (ত্রি-বুদ্ধিমান কাটাকে একটি ফ্রেমটিকে পেনাল্টিমেট বাটিটি দিয়ে শুরু করার অনুমতি দেওয়ার জন্য) এবং ফলস্বরূপ স্কোরগুলি প্রথম দশে কেটে ফেলা হয় (এখন সরাতে সম্ভাব্য বগাস 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

দুঃখের বিষয়, এমন কিছু কেস রয়েছে যেখানে এটি ব্যর্থ হয়। আমি পরে এসে আবার করব।

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