दस-पिन गेंदबाजी स्कोर - विश्व बॉलिंग संस्करण


20

विश्व गेंदबाजी स्कोरिंग

कई लोग गेंदबाजी के कुछ खेल खेलने के लिए अपने स्थानीय गेंदबाजी केंद्र में गए हैं, और कई लोग अपने स्कोर की गणना करने के लिए संघर्ष करना जारी रखते हैं। विश्व बॉलिंग ने अधिक लोगों को खेल के प्रति आकर्षित करने के लिए एक सरल स्कोरिंग प्रणाली शुरू की है। यह स्कोरिंग प्रणाली अंतरराष्ट्रीय खेलों में उपयोग की जाती है।

स्कोरिंग सिस्टम इस तरह काम करता है ( विकिपीडिया से ):

विश्व बॉलिंग स्कोरिंग प्रणाली को "वर्तमान फ्रेम स्कोरिंग" के रूप में वर्णित किया गया है:

  • हड़ताल: 30 (भले ही रोल के परिणामों की परवाह किए बिना)
  • स्पेयर: वर्तमान फ्रेम के पहले रोल पर 10 प्लस पिनफॉल
  • खुला: वर्तमान फ्रेम के लिए कुल पिनफॉल

यदि आप दस-पिन गेंदबाजी से परिचित नहीं हैं, तो यहां एक रिकैप है।

एक बॉलिंग लेन के अंत में 10 पिन होते हैं, जहाँ लक्ष्य उन सभी को बॉलिंग बॉल से नीचे गिराना होता है। आपको उन सभी को नीचे गिराने की कोशिश करने के लिए एक गेंद के 2 रोल मिलते हैं, अधिमानतः उन सभी को पहले रोल (एक स्ट्राइक के रूप में जाना जाता है ) के साथ नीचे गिराते हुए । अगर आपको स्ट्राइक मिलती है, तो वह फ्रेम पूरा हो जाता है और आपको दूसरी बार गेंद को रोल करने की जरूरत नहीं है। एक हड़ताल की कीमत 30 है।

यदि आप सभी दस को नहीं गिराते हैं, तो आपको एक और रोल मिलता है। यदि आप शेष सभी पिन को खटखटाते हैं, तो इसे एक अतिरिक्त के रूप में जाना जाता है । स्कोर 10 पिन के लायक है + पिंस की संख्या ने पहले रोल पर दस्तक दी। उदाहरण के लिए, अगर मैंने 7 पिन खटखटाया, तो शेष 3 को खटखटाने में कामयाब रहा, जिसकी कीमत 17 होगी।

यदि आपके दूसरे रोल के बाद आप सभी दस को खिसकाने में विफल रहते हैं, तो इसे एक खुले फ्रेम के रूप में जाना जाता है । स्कोर उस फ्रेम के लिए खटखटाए गए पिन की कुल संख्या के लायक है।

एक गेम में 10 फ्रेम होते हैं । यदि आप पारंपरिक बॉलिंग स्कोरिंग से परिचित हैं, तो आपको वर्ल्ड बॉलिंग स्कोरिंग के साथ 10 वें फ्रेम में अतिरिक्त रोल नहीं मिलता है। परंपरागत बॉलिंग स्कोरिंग में, 300 का सही स्कोर पाने के लिए लगातार 12 स्ट्राइक लेते हैं, जबकि वर्ल्ड बॉलिंग स्कोरिंग में लगातार 10 स्ट्राइक की आवश्यकता होती है।

चुनौती

आपकी चुनौती स्कोर शीट से दिए गए अंकों की गणना करना है।

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

इनपुट

आपको प्रत्येक फ्रेम के लिए एक स्ट्रिंग दी जाएगी, जिसमें कुल दस फ्रेम होंगे। प्रत्येक फ्रेम में दो मान होंगे, या यदि स्ट्राइक थी तो 1 मान जितना कम होगा। आपका इनपुट एक फ़ंक्शन के लिए स्ट्रिंग पैरामीटर हो सकता है, फ़ाइल से या STDIN से पढ़ा जा सकता है।

उदाहरण के लिए, यदि मैंने अपने पहले रोल पर 1 पिन खटखटाया, तो 2 को खटखटाया, फ्रेम "12" जैसा दिखेगा। इसका मतलब 12 (बारह) नहीं है, लेकिन 1 और 2 का मतलब है, कुल 3 के लिए।

अगर मैं दोनों रोल (गटर बॉल्स) के साथ हर पिन को मिस करता हूं, तो यह इस तरह दिखेगा "-" (0 का स्कोर)।

प्रत्येक फ्रेम को एक स्थान से अलग किया जाएगा।

नमूना इनपुट

-- 9- -9 X -/ 8/ 71 15 44 X

इस उदाहरण को तोड़ने के लिए,

  • फ़्रेम 1 (-) - दोनों रोल छूट गए। 0 रन बनाए
  • फ़्रेम 2 (9-) - पहले रोल पर 9 नीचे गिरा, दूसरे रोल पर चूक गए। स्कोर 9
  • फ़्रेम 3 (-9) - पहले पर सभी को याद किया, दूसरे पर 9 मिला। स्कोर 9
  • फ़्रेम 4 (एक्स) - स्ट्राइक, सभी दस को खटखटाया। स्कोर 30
  • फ़्रेम 5 (- /) - स्पेयर, पहले सभी पर चूक गए, 2 वें रोल के साथ सभी को नीचे गिरा दिया। स्कोर 10 + 0 = 10
  • फ़्रेम 6 (8 /) - स्पेयर, पहले रोल पर 8 पिन, दूसरे 2 को 2 वें रोल के साथ खटखटाया। स्कोर 10 + 8 = 18
  • फ़्रेम 7 (71) - खुला फ्रेम, पहले रोल पर 7 पिन, दूसरे रोल पर 1 पिन। स्कोर 7 + 1 = 8
  • फ़्रेम 8,9,10 ऊपर दिए गए उदाहरणों का अनुसरण करते हैं।

उत्पादन

आउटपुट केवल एक मूल्य होगा जिसमें सभी 10 फ़्रेमों से स्कोर का योग है। नमूना इनपुट का उपयोग करते हुए, आउटपुट 128 होगा। आपका आउटपुट एक स्ट्रिंग या एक संख्यात्मक प्रकार हो सकता है। यह एक फ़ंक्शन रिटर्न मान हो सकता है, या STDOUT पर लिखा जा सकता है।

नियम

  • मान लें कि इनपुट हमेशा मान्य होगा। उदाहरण के लिए, एक अमान्य फ्रेम "/ 8", "XX", "123", "0", आदि होगा।
  • आपको विभाजन या बेईमानी के बारे में चिंता करने की आवश्यकता नहीं है।
  • आपका कोड एक पूर्ण कार्यक्रम या एक फ़ंक्शन हो सकता है जो एक स्ट्रिंग में लेता है और स्कोर लौटाता है।
  • आपके कोड को कोई अपवाद नहीं फेंकना चाहिए।
  • यह कोड गोल्फ है, सबसे कम संख्या में बाइट्स जीत के साथ उत्तर
  • जिन भाषाओं का उपयोग या आयात होता है, उनके कोड के भाग के रूप में आयात विवरणों को शामिल करना चाहिए और बाइट काउंट की ओर गिनना चाहिए।

परीक्षण के मामलों

"-- 9- -9 X -/ 8/ 71 15 44 X" -> 128
"-- -1 2- 12 22 5- 42 61 8- 72" -> 45
"X X X 1/ 2/ 3/ 4/ 5/ -- 9/" -> 174
"X X X X X X X X X X" -> 300
"-- -- -- -- -- -- -- -- -- --" -> 0

21
मुझे निराशा है कि यह कोड-बॉलिंग चुनौती नहीं है
जो किंग

13
आपका पहला अतिरिक्त उदाहरण कहता है कि स्कोर 13 होगा, लेकिन मुझे लगता है कि यह 17 माना जाता है।
जो।

@Jo। अच्छी पकड़। मैंने उस त्रुटि को ठीक करने के लिए प्रश्न अपडेट किया है।
मकोतोसन

@ जोकिंग मैं सोच रहा था कि यह एक कोड-बॉलिंग चुनौती है जो 10 सबचेंजल्स से बना है जब मैंने पहली बार टाइटल देखा था।
वीजुन झोउ

1
सबसे अच्छी प्रलेखित और लिखित चुनौतियों में से एक जो मैंने देखी है।
जोशुआ

जवाबों:



7

जावास्क्रिप्ट, 43 बाइट्स

f=([c,...s])=>c?({'/':10,X:30}[c]|c)+f(s):0

यह काम किस प्रकार करता है

हम प्रत्येक पात्र को उसके बिंदु पर परिवर्तित करते हैं:

  • 'X' की कीमत 30 पॉइंट है
  • 10 अंक के लायक '/'
  • '1' .. '9' का मूल्य 1 .. 9 अंक है
  • 0 अंक के लायक अन्य वर्ण

फिर सभी बिंदुओं का योग।

धर्मांतरित

बिटवाइज़ या ऑपरेटर |अपने ऑपरेंड को परिचालित करने से पहले Int32 में बदल देते हैं। Int32 में कनवर्ट करते समय, मान पहले नंबर (64 बिट फ्लोट नंबर) प्रारूप में परिवर्तित होता है, फिर Int32 में ट्रंक (या अमान्य होने पर 0 में परिवर्तित)।

  • ToInt32({'/':10,X:30}[c]) के रूप में पढ़ा जा सकता है:
    • अगर c == '/': परिणाम 10 है;
    • अगर c == 'X': परिणाम 30 है;
    • अन्यथा: परिणाम है ToInt32(undefined)-> ToInt32(NaN)-> 0;
  • ToInt32(c) हो सकता है:
    • if c == '1' ... '9': परिणाम 1 है .. 9;
    • अगर c == '': Number(c)0 है, तो परिणाम 0 है;
    • अन्यथा: Number(c)है NaN, परिणाम 0 है;
  • बिटवाइज़ या यहाँ "ऐड" के समान है, क्योंकि इसका एक ऑपरेंड 0 होगा

योग

  • [c,...s] = sचलो c = s[0], और s = s.slice(1);
    • यदि एस खाली स्ट्रिंग है, तो सी अपरिभाषित है ;
    • अन्यथा, c, s का पहला अक्षर है
  • अपरिभाषित मिथ्या है, गैर-रिक्त स्ट्रिंग (स्थान सहित) सत्य है

1
क्या आप अपना कोड समझा सकते हैं? वास्तव में अच्छा लग रहा है
लुइस फेलिप डी जीसस मुनोज़

@LuisfelipeDejesusMunoz ने कुछ जोड़ा।
tsh

5

स्टैक्स , 13 बाइट्स

─*âⁿ┴8òt↨HÉ÷8

इसे चलाएं और डीबग करें

अनपैक्ड, अनगुल्फेड और टिप्पणी इस प्रकार है।

F               for each character in input, execute...
 9R$'/20*+'X+   build the string "123456789////////////////////X"
 I              get the index of the current character in string
 ^+             increment and add to running total
                (index is -1 when no match; space and dash are 0 score)

इसको चलाओ



3

जावा 8, 64 59 46 बाइट्स

s->s.map(c->c<46?0:c<48?10:c>87?30:c-48).sum()

-5 बाइट्स @Neil की बदौलत
-13 बाइट्स @ OlivierGrégoire को धन्यवाद ।

स्पष्टीकरण:

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

s->               // Method with an IntStream parameter and integer return-type
  s.map(c->       //  Loop over the characters
          c<46?   //   If the character is a space or '-':
           0      //    Count it as 0
          :c<48?  //   Else-if it's a '/':
           10     //    Count it as 10
          :c>87?  //   Else-if it's an 'X':
           30     //    Count it as 30
          :       //   Else (it's a digit):
           c-48   //    Count it as the value of the digit
       ).sum()    //   And sum everything

1
("123456789//"+1e6+1e6+"X")5 बाइट्स बचाने के लिए लगता है।
नील

कि कुछ भराव स्ट्रिंग बनाने के लिए एक चतुर तकनीक है।
मकोतोसन


3

एफ #, 106 103 बाइट्स

let s c=Seq.sumBy(fun x->if x=' '||x='-'then 0 elif x='X'then 30 elif x='/'then 10 else int(string x))c

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

मुझे लगता है कि यह पहेली (बिना गोल्फिंग) "शुरुआती के लिए कार्यात्मक प्रोग्रामिंग" गाइड के लिए एक बड़ा सवाल होगा। और मुझे पता होना चाहिए!

-3 केविन क्रूज़सेन से, यह पता लगाने के लिए कि 'और "तब" के बीच व्हाट्सएप को हटाया जा सकता है। धन्यवाद!

स्ट्रिंग इंडेक्स का उपयोग करने के लिए पुनरावर्ती का स्टैक्स समाधान बहुत अच्छा है। यदि आप इसे F # पर पोर्ट करते हैं तो आप इसे 77 बाइट्स के लिए प्राप्त कर सकते हैं :

let s c=Seq.sumBy(fun x->"123456789/???????????????????X".IndexOf(char x)+1)c

यह ऑनलाइन कोशिश करो!


1
मुझे F # बहुत अच्छी तरह से नहीं पता है, लेकिन ऐसा लगता है कि आप '-3 बाइट्स के बाद रिक्त स्थान छोड़ सकते हैं ।
केविन क्रूज़सेन

न ही मैं! लेकिन तुम सही हो, अच्छी तरह से देखा! धन्यवाद!
सियारन_मकरथी

2
@Ciaran_McCarthy: मुझे कोई आपत्ति नहीं है अगर आप मेरे समाधान की नकल करते हैं तो आप इसे भी शामिल करना चाहेंगे। इस तरह की चीज़ के बारे में यहाँ के लोग आमतौर पर बहुत खुले हैं। यह औपचारिक रूप से एक प्रतियोगिता है, भले ही सभी छोटे कोड खोजने के लिए एक सहकारी प्रयास हो।
पुनरावर्ती

1
धन्यवाद पुनरावर्ती। मैं इसे शामिल करूंगा, क्योंकि यह एक बहुत अच्छा समाधान है, और यह देखना दिलचस्प है कि यह विभिन्न भाषाओं में कैसा दिखता है।
सियारान_मकरथी

2

जेली , 17 बाइट्स

ḟ⁾ -“X0/⁵”yV€o30S

वर्णों की एक सूची को स्वीकार करने और पूर्णांक वापस करने के लिए एक विवादास्पद लिंक

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

कैसे?

ḟ⁾ -“X0/⁵”yV€o30S - Link: list of characters
 ⁾ -              - literal list of characters [' ','-']
ḟ                 - filter discard
    “X0/⁵”        - literal list of characters ['X','0','/','⁵']
          y       - translate (change 'X's to '0's and '/'s to '⁵'s)
           V€     - evaluate €ach character as Jelly code (the '⁵'s become 10s)
             o30  - logical OR with 30 (change all instances of 0 to 30)
                S - sum

17 पर भी:

”/ẋ20ØD;;”XḊiЀ⁸S

उसकी कोशिश करो



2

रेटिना , 17 बाइट्स

X
///
/
55
\d
*
_

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

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


2

पर्ल 5 -pF , 30 27 बाइट्स

-3 बाइट्स एक्सकली के लिए धन्यवाद

#!/usr/bin/perl -pF
$\+=m%/%+3*/X/.0+$_ for@F}{

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


आप का उपयोग करके दो बाइट्स कटौती कर सकते हैं /X/के बजाय y/X//और एक और का उपयोग करके m%/%बजाय y%/%%: यह ऑनलाइन कोशिश करो!
Xcali

@Xcali आह, बिल्कुल। क्लासिक गोल्फ शॉर्टसाइटेडनेस, मैं तब भी सोच y///रहा था जब मैंने उन्हें लूप के बाहर किया था। धन्यवाद
टोन हास्पेल

1

05AB1E , 14 बाइट्स

þ`I…/aXS¢ƶT*`O

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

व्याख्या

þ`              # Push the digits of the input on the stack (removes everyting that isn't a digit)
  I…/aXS        # Push the input and the array "/","a","X" on the stack
        ¢       # Index of each element in the input ...
         ƶT*    # ... multiplied by its index (a could be anything that can't be found in the input), multiplied by 10.
            `O  # Sum the stack, implicit display

1

जे , 33 बाइट्स

1#.31|('-123456789',20 1#'/X')i.]

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

स्पष्टीकरण:

] इनपुट

('-123456789',20 1#'/X')20 /और एक Xस्ट्रिंग के लिए जोड़ता है-123456789

i. उपरोक्त स्ट्रिंग में इनपुट के सूचकांक पाता है

31|modulo 31 - रिक्त स्थान से छुटकारा पाने के लिए - वे स्ट्रिंग में नहीं पाए जाते हैं, इसलिए i.उनके लिए 31 रिटर्न देता है

1#. सूचकांकों का योग पाता है


चूंकि जे और रेड दो पूरी तरह से अलग-अलग भाषाएं हैं, इसलिए दो अलग-अलग उत्तरों को पोस्ट करना बेहतर है, भले ही वे ऐसा कर सकते हैं। आप इस J उत्तर के लाल उत्तर से एक लिंक जोड़ सकते हैं, यह बताते हुए कि यह आपके J उत्तर का एक पोर्ट है।
केविन क्रूज़सेन

@ केविन क्रूज़सेन - ठीक है, धन्यवाद - मैं इसे करूँगा। उन्हें एक साथ पोस्ट करने का कारण यह है कि स्पष्ट रूप से लाल समाधान गैर-प्रतिस्पर्धी है (हालांकि बहुत पठनीय :))
गैलेन इवानोव

1

पायथन 2 , 67 बाइट्स

-3 बाइट्स @ केविनक्रूजसेन को धन्यवाद

lambda I,p='-123456789/'+20*'X':sum(p.rfind(i)for i in I if i in p)

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


1
आप को बदलने के द्वारा 3 बाइट्स बचा सकते हैं '-123456789'+'/'*20+'X':sum(p.index(i)करने के लिए'-123456789/'+'X'*20:sum(p.rfind(i)
केविन Cruijssen

@KevinCruijssen धन्यवाद, एक अच्छा!
मृत पोसुम

1

जेली , 12 बाइट्स

⁾/X,“½œ‘y|0S

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

यह काम किस प्रकार करता है

⁾/X,“½œ‘y|0S  Main link. Argument: s (string)

⁾/X,“½œ‘      Literal; yield [['/', 'X'], [10, 30]].
        y     Transliterate; replace '/' with 10, 'X' with 30.
         |0   Bitwise OR with 0. Bitwise operators attempt to cast to int, mapping 
              '0', ..., '9' to 0, ..., 9. All other characters map to 0.
           S  Take the sum.


1

कोटलिन , 50 बाइट्स

x->x.sumBy{"123456789/_${Math.E}_X".indexOf(it)+1}

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

उम्मीद है कि यह आपके खुद के सवाल का जवाब देने के नियमों के खिलाफ नहीं है लेकिन मैं इसमें शामिल होना चाहता हूं।

Math.Eमूल्य पैदा करता है 2.718281828459045। मैं 30 को एक्स को पुश करने के लिए कुछ फिलर स्ट्रिंग बनाने के लिए इसका उपयोग कर रहा हूं।

indexOfस्ट्रिंग में चरित्र का स्थान (0-आधारित) "12345 ..." मिलता है। यदि यह नहीं मिला है, तो यह -1 देता है। हम इन 0 को बनाने के लिए 1 जोड़ते हैं, और यह 0-स्थिति को स्ट्रिंग का मान भी बनाता है।


1

PHP, 119 109 बाइट्स

-10 बाइट्स @KevinCruijssen को धन्यवाद

<?foreach(explode(" ",$argv[1])as$f){[$a,$b]=str_split($f);$n+=$f==X?30:(int)$a+($b=='/'?10:(int)$b);}echo$n;

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


आप बदल सकते हैं ($b=='/'?10+(int)$a:((int)$a+(int)$b))करने के लिए (int)$a+($b=='/'?10:(int)$b)-10 बाइट्स के लिए।
केविन क्रूज़सेन

@KevinCruijssen धन्यवाद, अच्छा लग रहा है! हालाँकि, अन्य उत्तरों को देखकर ऐसा लग रहा है कि मैं इस बारे में गलत / लंबा रास्ता तय कर रहा हूँ। :)
जो।

0

चारकोल , 23 बाइट्स

IΣEχΣES⎇№-/Xλ×χ⌕-//XλIλ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

  Eχ                    Map over 10 frames
      S                 Input the frame
     E                  Map over the characters
            λ           Current character
        №-/X            Search the literal string `-/X`
                    λ   Current character
               ⌕-//X    Find position in literal string `-//X`
             ×χ         Multiply by predefined variable 10
                      λ Current character
                     I  Cast to integer
       ⎇                Ternary
    Σ                   Sum for each frame
 Σ                      Sum over frames
I                       Cast to string for implicit print




0

SNOBOL4 (CSNOBOL4) , 169 151 147 बाइट्स

	F =INPUT ' '
R	F '-' =0	:S(R)
T	F 'X' ='_'	:S(T)
S	F LEN(1) . X ARB . Y ' ' REM . F	:F(O)
	X '_' =30
	Y '/' =10
	S =S + X + Y	:(S)
O	OUTPUT =S
END

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

	F =INPUT ' '					;* read input and append a space
R	F '-' =0	:S(R)				;* replace - with 0
T	F 'X' ='_'	:S(T)				;* replace X with _
S	F LEN(1) . X ARB . Y ' ' REM . F	:F(O)	;* set first character to x, remainder up to ' ' to y, and remainder to F
	X '_' =20					;* replace _ in x with 20
	Y '/' =10					;* replace / in y with 10
	S =S + X + Y	:(S)				;* else X and Y are their values so we can sum them
O	OUTPUT =S					;* output the sum
END

0

क्लोजर , 70 बाइट्स

#(reduce(fn[s i](+ s(case i\- 0\/ 10\X 30\space 0(bigint(str i)))))0%)

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

जब reduceएक स्ट्रिंग पर आईएनजी, प्रत्येक चार वास्तव में एक चर में बदल जाता है - जिसने सोचा होगा। लेकिन इस बीच, मुझे लिखना होगा \spaceऔर यह कि एक से अधिक दर्द होता है की कल्पना कर सकते हैं। इसके अलावा, जब एक चार से एक वास्तविक संख्या बनाते हैं, का संयोजन bigintऔर strकेवल प्रयोग करने योग्य संयोजन लगता है।

खैर, इन सभी संघर्षों से अलग: अनाम फ़ंक्शन जो स्कोर को एक प्राकृतिक के रूप में लौटाता है।


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