ब्रिज हैंड स्कोरिंग


13

अनुबंध पुल को बहुत दिलचस्प बनाने वाली चीजों में से एक इसकी अत्यधिक जटिल "कृत्रिम" मेटा खेल है। हाथों को स्कोर करने की यह प्रणाली इसका एक छोटा सा हिस्सा है।

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

स्कोरिंग

यहाँ एक नमूना हाथ है:

S:KQT5
H:J72
D:965
C:AK8

एस, एच, डी, सी सूट (हुकुम, दिल, हीरे और क्लब) का प्रतिनिधित्व करते हैं और बाकी उन सूट में कार्ड हैं। तो इस हाथ में हुकुम (क्यू), हुकुम का राजा (के), हुकुम (टी) के दस, हुकुम के पांच, दिलों के जैक, दिलों के सात आदि की रानी है।

स्कोरिंग प्रणाली निम्नानुसार काम करती है:

  • आपको हर इक्के (ए) के लिए 4 अंक मिलते हैं, हर राजा के लिए 3 अंक (के), हर रानी के लिए 2 अंक (क्यू) और हर जैक (जे) के लिए 1 अंक होता है। कोई अन्य कार्ड अंक नहीं देता है।
  • एक सूट में चौथे के बाद हर कार्ड आपको 1 अंक देता है। इसलिए अगर आपके छह दिल हैं, तो आपको 2 अंक मिलेंगे।
  • एक सूट जहां आपके पास केवल 2 कार्ड हैं, आपको 1 अंक देता है (यह एक डबलटन है)। एक सूट जहां आपके पास सिर्फ 1 कार्ड है, आपको 2 अंक देता है (यह एक सिंगलटन है)। यदि आपके पास एक निश्चित सूट में कोई कार्ड नहीं है, तो आपको 3 अंक मिलते हैं (यह एक शून्य है)। (आमतौर पर ये केवल एक बार गिना जाता है जब आप अपने साथी के साथ एक सूट पर सहमत होते हैं, लेकिन चुनौती को और अधिक रोचक बनाने के लिए मैं उनमें शामिल हूं।)

तो, ऊपर के हाथ में 13 अंक हैं।

चुनौती

ऊपर दिखाए गए प्रारूप में एक पुल हाथ को देखते हुए, गणना करें कि हाथ में कितने बिंदु हैं। सूट हमेशा हुकुम, दिल, हीरे और क्लबों में सूचीबद्ध होंगे, और कार्ड हमेशा क्रम ए, के, क्यू, जे, टी, 9 - 2 में क्रमबद्ध होंगे।

नमूना इनपुट और आउटपुट

S:KQT5
H:J72
D:965
C:AK8
       \-> 13

S:AKQT6
H:54
D:J83
C:732
       \-> 12

S:
H:KQT8754
D:A86
C:432
       \-> 15

S:9876
H:843
D:652
C:432
       \-> 0

S:AKQT5
H:AQJ6
D:Q3
C:AK
       \-> 28

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है।

जवाबों:


4

जेली, 27 25 21 बाइट्स

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

L_5.AḞW+“JQKA”i$€Sµ€S

यह लाइनों की सूची के रूप में इनपुट लेता है। मल्टीलाइन स्ट्रिंग के रूप में इनपुट लेने के लिए, पहले से तैयार करें ṣ⁷µ

आवृत्ति बिंदुओं की तालिका बनाना:

Cards:    0  1  2  3  4  5  6 ... 4+k
Points:   3  2  1  0  0  1  2 ... k

हम देख सकते हैं कि वे समान हैं abs(c-3.5)-.5, जहाँ c कार्डों की संख्या है। चूंकि प्रत्येक पंक्ति में दो अतिरिक्त वर्ण होते हैं, और अंकों की संख्या हमेशा एक पूर्णांक होती है, यह वह floor(abs(l-5.5))जगह है जहां एल लाइन की लंबाई है।

ध्यान दें कि जेली के सूचकांक 1-आधारित हैं, और बेमेल आयामों पर वेक्टरकृत कार्यों का व्यवहार: लंबी सूची के अतिरिक्त तत्व अप्रभावित हैं। तो [1] + [3,2,0,0]देता है [4,2,0,0]

                  µ      The program is two monadic fs applied in turn; an atop.
L_5.AW+“JQKA”i$€S       Helper function:
                 €        For €ach line:
L                         Get the line Length.
 _5.                      Subtract 5.5 (Numeric literals' decimal parts default to .5)
    A                     Apply Absolute value
     Ḟ                    Floor
      W                   Then Wrap it in an array. "S:AKQT6" gives [1].
        “JQKA”i$          Monadic function: index into the string "JQKA".
                €         Apply ^ over €ach char of the line; [3,2,0,0,0].
       +                  Add the two arrays together; [4,2,0,0,0].
                 S        Sum; 6.
                    S    Main link: Sum all results

इसे यहाँ आज़माएँ ।


3

ईएस 6, 107 99 89 बाइट्स

s=>(t=0,[...s].map(c=>t+="JQKA".search(c)+1),s.split`
`.map(l=>t+=(l=l.length-6)^l>>4),t)

2

पायथ, 27 25 24 बाइट्स

sms+a5.5ldshMxL"JQKA"d.z

हम प्रत्येक सूट के लिए अलग-अलग मानों की गणना करते हैं, फिर उन्हें जोड़ते हैं।

  s m                 sum of map lambda d:  (d is a line of input)
      +                 add the
        s a                 floor of the absolute difference between
            5.5               5.5
            l d               and len(d)
          s hM xL           to the sum of the indices each incremented by one
                  "JQKA"      of each char in d in the string "JQKA"
                  d
      .z

टेस्ट सूट


1

रेटिना, 77 59 बाइट्स

T`AKQJTd`5-1
:(.){0,3}(.)?
$#1$#1$#2 3$0
\S
$0$*1
+`1 1

1

लाइनों / लाइन जोड़े द्वारा स्पष्टीकरण:

  • पहली पंक्ति में हम चार्ट AKQJT987655432को में परिवर्तित करते हैं 5432111111111। प्रत्येक सूट के लिए इसका मतलब है कि हमारे पास एक राशि है। यदि हमारे पास 0 1 2 3 4 5 6 7 ...इस सूट में कार्ड हैं, तो योग +3 +1 -1 -3 -4 -4 -4 -4 ...सही अंक से बंद है ।
  • इसे ठीक करने के लिए 2 और 3 की पंक्तियों में हम हर पंक्ति में 3 जोड़ते हैं और एक स्थान से पहले हम मान जोड़ते हैं जिसे हम घटाएंगे। यह घटाया गया मूल्य अधिकतम 3 के साथ कार्ड की लंबाई का दोगुना है, और कम से कम 4 कार्ड होने पर 1 और।
  • लाइनों 4 और 5 में हम विभाजक स्थान को छोड़कर बाकी सभी चीजों को एकसूत्र में बदलने के लिए अंकों को परिवर्तित करते हैं।
  • 6 और 7 की पंक्तियों में हम एकात्मक घटाव करते हैं।
  • पंक्ति 8 में हम 1उस परिणाम को गिनते हैं जो परिणाम देता है।

इसे यहाँ ऑनलाइन आज़माएँ।



1

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

½Γ}♣▓="pì∩û╨▐M↨}╚-

अब तक का सबसे छोटा जवाब, जेली को हराया (हालाँकि मुझे उम्मीद है कि जल्द ही हार जाएगा ...)

भागो और डिबग ऑनलाइन!

व्याख्या

समझाने के लिए अनपैक्ड संस्करण का उपयोग करता है।

LZF{"JQKA"I^+i5-:++F5+
L                         Collect input in a list (if this is not needed, we can yet save another byte)
 Z                        Put a zero under the top of the stack, used as the accumulator
  F                       Loop for every suit
   {               F      Calculate the "score" for the string describing the suit
    "JQKA"I^              Find the 1-based index of current character in "JQKA", 0 for not found
            +             Add to the accumulator
             i5-:+        Subtract 5 from the current 0-based index, and take the sign
                  +       Add to the accumulator
                    5+    Add 5 extra points for each suit

यह अनुवाद करके हासिल किया जाता है

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

सेवा

  • प्रत्येक सूट के लिए 3 अतिरिक्त अंक
  • एक सूट में चौथे से पहले प्रत्येक कार्ड आपको -1 अंक देता है, चौथे के बाद प्रत्येक कार्ड आपको 1 अंक, चौथा कार्ड स्कोर 0 देता है।

तब हम साइनम फ़ंक्शन की संपत्ति का उपयोग कर सकते हैं।

ऐसा करने से हम कुछ बाइट्स सहेजने वाले कार्डों की संख्या से स्पष्ट रूप से निपट सकते हैं।

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