ब्रैग हाथ का नाम


11

पृष्ठभूमि

Brag एक कार्ड गेम है जो कॉन्सेप्ट के समान है, लेकिन पोकर की तुलना में सरल है। ब्राग में एक हाथ में तीन कार्ड होते हैं और इसे उच्चतम से निम्नतम श्रेणी के अनुसार रैंक किया जाता है:

  • एक तरह से तीन - सभी तीन कार्ड एक ही रैंक। जिसका नाम "तीन किंग्स" आदि रखा गया।

  • रनिंग फ्लश उर्फ ​​स्ट्रेट फ्लश। एक ही सूट और लगातार रैंक के सभी तीन कार्ड। हाथ को तीन कार्डों द्वारा आरोही क्रम में नाम दिया गया है, जिसके बाद "उछाल पर" शब्दों को एक साधारण रन / स्ट्रेट से अलग करने के लिए, उदाहरण के लिए "बाउंस पर दस-जैक-क्वीन"। नोट इक्का या तो उच्च या निम्न है, लेकिन दोनों नहीं - "राजा-ऐस-दो" एक रन नहीं है।

  • उर्फ सीधा दौड़ो। जैसा कि ऊपर है, लेकिन सूट के मिलान की आवश्यकता के बिना। जैसा कि "दस-जैक-रानी" के रूप में नामांकित।

  • फ्लश - सभी तीन कार्ड एक ही सूट, उच्चतम रैंक के नाम पर जैसे "ऐस फ्लश"।

  • जोड़ी - दो कार्ड एक ही रैंक एक दूसरे संस्करण रैंक के साथ एक साथ। जिसे "जोड़ी ऑफ थ्रीज" आदि नाम दिया गया।

  • किसी भी अन्य संयोजन, उच्चतम रैंक के नाम पर उदाहरण के लिए "ऐस उच्च"।

चुनौती

तीन प्लेइंग कार्ड को देखते हुए, ब्रैग हाथ के नाम को वे आउटपुट करते हैं।

कार्ड या तो तीन 2-वर्ण स्ट्रिंग्स के रूप में इनपुट होंगे या एक एकल 6-वर्ण स्ट्रिंग (जो भी आपके क्रियान्वयन पसंद करते हैं) के रूप में संक्षिप्त किया जाएगा, जहां प्रत्येक जोड़ी का पहला रैंक है (2 ... 9, T, J, Q,) के, ए) और दूसरा सूट (एच, सी, डी, एस) को दर्शाता है।

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

आप मान सकते हैं कि इनपुट वैध होगा (उपरोक्त रेंज में रैंक और सूट, कोई दोहराया कार्ड नहीं) और जो भी मामले में आप पसंद करते हैं, लेकिन किसी विशेष क्रम में नहीं होगा।

आउटपुट सभी राजधानियों में होना चाहिए, सभी निचले मामले में, या एक समझदार पूंजीकरण जैसे शीर्षक मामला या वाक्य मामला। न्यूमेरिक रैंकों को वर्तनी दी जानी चाहिए जैसे "दसियों" को 10 एस नहीं।

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

2H3C2D => "pair of twos"

TD8C9C => "eight-nine-ten"

4SKS9S => "king flush"

4D4H4S => "three fours"

5H3H2C => "five high"

2D3DAD => "ace-two-three on the bounce"

6D6C6H => "three sixes"

इस साइट पर एक चुनौती पर यह मेरा पहला प्रयास है, कृपया सुधार का सुझाव दें लेकिन सौम्य बनें :)



4
PPCG में आपका स्वागत है! मैंने अब तक केवल चुनौती को कम किया है, लेकिन यह पहली चुनौती के लिए सभ्य है। उस ने कहा, अच्छी चुनौतियां लिखना कठिन है और भविष्य के लिए मैं सैंडबॉक्स में विचारों को पोस्ट करने की सलाह दूंगा जहां आप डाउनवोट्स, क्लोज वोट और उत्तरों को प्राप्त करने से पहले फीडबैक प्राप्त कर सकते हैं और विनिर्देश का विवरण सुधार सकते हैं। चुनौती।
मार्टिन एंडर

@MartinEnder धन्यवाद! मैं निश्चित रूप से अगली बार सैंडबॉक्स पर एक नज़र डालूंगा।
IanF1

क्या हम ट्यूल के सरणियों के रूप में इनपुट प्राप्त कर सकते हैं? इसके अलावा, क्या हम 'किंग फ्लश' से लेकर 'fk' तक आउटपुट को छोटा कर सकते हैं?
मैथ्यू रो

1
कृपया "6D6C6S"एक परीक्षण के मामले के रूप में जोड़ें क्योंकि छह एक विषम बहुवचन है
ऐसा नहीं है कि चार्ल्स

जवाबों:


2

रूबी, 384 , 320

दो-चार तार की एक सरणी को स्वीकार करता है।

पाइप मानों को हेक्स मानों में अनुवाद करता है और कितने अलग पाइप मानों के आधार पर हाथों की पहचान करता है।

->*d{u=d.map{|x|*u=x[1]}==u*3
g=d.map{|x|(x[0].tr'TJQKA','ABCDE').hex}.sort
g=1,2,3if[2,3,14]==g
_,l,h=a=g.map{|x|%w{king queen jack ten nine eight seven six five four three two ace}[-x%13]}
[*g[0]..2+g[0]]==g ?a*?-+(u ?' on the bounce':''):u ?h+' flush':[h+' high','pair of '+l+=l[?x]?'es':?s,'three '+l][-g.uniq.size]}

एनोटेट:

->*d{
    # u is "Is this a flush?"" (see if you have more than one suit)
    u=d.map{|x|u=x[1]}==[u]*3

    # g is the sorted card values in integer (convert to base 16)
    g=d.map{|x|x[0].tr('TJQKA','ABCDE').hex}.sort

    # use Ace == 1 if we have a low straight
    g=[1,2,3]if[2,3,14]==g

    # a is the names of all the cards
    a=g.map{|x|%w{ace two three four five six seven eight nine ten jack queen king ace}[x-1]}

    # l is for "plural" - just choose the middle card because we
    #                     only care about plurals for 2s or 3s
    l=a[1].sub(?x,'xe')+?s

    # if [g[0],g[0]+1,g[0]+2] == g, we have a run
    # possibly "on the bounce"
    ([*g[0]..g[0]+2]==g) ? (a * ?-) + (u ? ' on the bounce' : '') :

    # if we have a flush, we can't have three-of-a-kind, so try that first
    u ? a[2]+' flush' :

    # otherwise, dedupe your hand. if there's: 
    # 3 values, x high; 2 values, pair; 1 value, three
    [a[2]+' high','pair of '+l,'three '+l][-g.uniq.size]
}

3

पायथन 2 , 788, 715, 559, 556, 554, 546, 568, 522 बाइट्स

* अब 46 छक्के बचाने के लिए बेन फ्रैंकल को धन्यवाद 'छक्के' पास करता है!


import re
d,m,n=dict(zip('JQKA',range(10,15))),'pair of %ss','%s-%s-%s'
C=lambda s:int(d.get(s[0],s[0]))
z,x,c=sorted(re.findall('..',raw_input()),key=C)
q,w,e=C(z),C(x),C(c)
A=[0,0,'two','three','four','five','six','seven','eight','nine','ten','jack','queen','king','ace']
I,O,U=A[e],A[w],A[q]
a,k='%s high'%I,e-w+q
if k==13:a=n%(I,U,O)
if k==w:a=n%(U,O,I)
if q==w or e==w or e==q:a=m%O
if k==e==w:a='three %ss'%I
if'x'in a:a=a[:-1]+'es'
if z[-1]==x[-1]==c[-1]:
 if'-'in a:a+=' on the bounce'
 else:a='%s flush'%I
print a

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

एक शांत पहली चुनौती के लिए धन्यवाद!


1
कुछ व्हाट्सएप गोल्फ सुझाव: टीआईओ
गणित के नशेड़ी

धन्यवाद! मुझे पता था कि सफेद स्थान बहुत सारे बाइट्स जोड़ रहा है लेकिन मुझे लगा कि इसके लिए 4 स्थान चाहिए। संपादित! @ मथ_जोंकी
स्टीफन

@ user7686415 या आप इसके बजाय वास्तविक टैब का उपयोग कर सकते हैं।
mbomb007

1
@NothatCharles ने इसे ठीक किया!
स्टीफन

1
@ स्टीफन, ज़रूर। D.get(a, b)अगर कुंजी नहीं मिली है तो डिफॉल्ट मान b के साथ कुंजी D पर मान डी में एक्सेस करें। यह लेखन D[a] if a in D else bके समान है, जो लेखन के समान है D[a] if a in D.keys() else b
बेन फ्रेंकल

2

PHP, 413 405 398 409 408 406 398 बाइट्स

दुर्भाग्य से, PHP स्ट्रिंग्स के अंदर नेस्टेड सरणी संदर्भित का समर्थन नहीं करता है;
कि एक और 6 5 बाइट्स बचा होगा ।

for(;$a=$argn[$i++];)$i&1?$v[strpos(_3456789TJQKA,$a)]++:$c[$a]++;$k=array_keys($v);sort($k);$n=[two,three,four,five,six,seven,eight,nine,ten,jack,queen,king,ace];echo($m=max($v))<2?($k[!$d=count($c)]+2-($h=$k[2])?$k[1]>1|$h<12?"$n[$h] ".[flush,high][$d++/2]:"ace-two-three":$n[$k[0]]."-".$n[$k[1]]."-$n[$h]").[" on the bounce"][$d^1]:($m<3?"pair of ":"three ").$n[$v=array_flip($v)[$m]].e[$v^4].s;

इसे ऑनलाइन चलाएं echo <hand> | php -nR '<code>या परीक्षण करें

टूट - फूट

for(;$a=$argn[$i++];)$i&1?      # loop through input
    $v[strpos(_3456789TJQKA,$a)]++  # count values on even positions [0,2,4]
    :$c[$a]++;                      # count colors on odd positions [1,3,5]
$k=array_keys($v);sort($k);     # $k=ascending values
$n=[two,three,four,five,six,seven,eight,nine,ten,jack,queen,king,ace];
echo($m=max($v))<2              # three different values:
?($k[!$d=count($c)]+2-($h=$k[2])    # test normal straight ($d=color count, $h=high card)
    ?$k[1]>1|$h<12                      # test special straight
        ?"$n[$h] ".[flush,high][$d++/2]     # flush if one color, high card if not
                                            #   ($d++ to avoid " on the bounce")
        :"ace-two-three"                    # special straight
    :$n[$k[0]]."-".$n[$k[1]]."-$n[$h]"  # normal straight
).[" on the bounce"][$d^1]          # if straight: straight flush if one color
:($m<3?"pair of ":"three ")     # pair or triplet
    .$n[$v=array_flip($v)[$m]]      # card name
    .e[$v^4].s                      # plural suffix
;

PHP> = 5.6 (के लिए e[...]) की आवश्यकता है


1
यह "छक्के" विफल हो सकता है
नहीं कि

1
@ नॉचचार्ल्स: वह लागत मुझे 11 बाइट्स ... लेकिन मैंने उन्हें वापस गोल्फ दिया। :)
टाइटस

1

पायथन 2 - 583 बाइट्स

मैं पोस्टों पर टिप्पणी करने में सक्षम होने के लिए बहुत नया हूं, इसलिए मैं सिर्फ अजगर सोल्यूशन के अपने संस्करण को पोस्ट करता हूं।

जोड़ी और तीन छक्कों के लिए 'एस' के साथ फिक्स्ड मुद्दा। धन्यवाद कि चार्ल्स नहीं

d={'A':['ace',14],'2':['two',2],'3':['three',3],'4':['four',4],'5':['five',5],'6':['six',6],'7':['seven',7],'8':['eight',8],'9':['nine',9],'T':['ten',10],'J':['jack',11],'Q':['queen',12],'K':['king',13]}
r=input()
j=1
i=lambda x:d[x][j]
v=sorted(r[::2],key=i)
z,y,x=v
s=r[1::2]
e='es'if i(y)==6else's'
j=0
a=i(x)
if z==y or y==x:r="pair of %s"%i(y)+e
if s[0]*3==s:r="%s flush"%a
t="%s-%s"%(i(z),i(y))
j=1
u=" on the bounce"if r[-1]=='h'else ""
if i(z)+i(x)==2*i(y):r=t+"-%s"%a+u
if ''.join(v)=="23A":r="%s-"%a+t+u
if [z]*3==v:r="three %s"%d[z][0]+e
if len(r)==6:r="%s high"%a
print r

कुछ टिप्पणियों के साथ थोड़ा और पठनीय

# first of all we don't need to keep suits
d={'A':['ace',14],'2':['two',2],'3':['three',3],'4':['four',4],'5':['five',5],'6':['six',6],'7':['seven',7],'8':['eight',8],'9':['nine',9],'T':['ten',10],'J':['jack',11],'Q':['queen',12],'K':['king',13]}
r=input()                           # input placed in r, to safely check r[-1] later in code
j=1                                 # j toggles reading from dictionary: 0-string, 1-value
i=lambda x:d[x][j]                  # lambda used to access dictionary
v=sorted(r[::2],key=i)              # take values from input and sort
z,y,x=v                             # variables to compact code
s=r[1::2]                           # take suits from input
e='es'if i(y)==6else's'             # choose ending 'es' for six and 's' for others (for pair and three)
j=0                                 # toggle reading from dictionary to string
a=i(x)                              # get string of top most value
if z==y or y==x:                    # check only two pairs as values are sorted
    r="pair of %s"%i(y)+e
if s[0]*3==s:                       # compact check if all string characters are equal to detect flush
    r="%s flush"%a
t="%s-%s"%(i(z),i(y))               # part of straight output - first two values
j=1                                 # toggle reading from dictionary to values
u=" on the bounce"\                 # addon to output in case of possible straight flush
if r[-1]=='h'else ""                # detected by checking last character in r
                                    # which would be 'h' if flush was detected
if i(z)+i(x)==2*i(y):               # check straight - three sorted numbers a,b,c would be in line if a+c == 2*b
    r=t+"-%s"%a+u                   
if ''.join(v)=="23A":               # check special case with straight, started from Ace
    r="%s-"%a+t+u  
j=0                                 # toggle reading from dictionary to string
if [z]*3==v:                        # check three equal values (almost the same as flush check)
    r="three %s"%d[z][0]+e
if len(r)==6:                       # if r was never modified, then it's just one high card
    r="%s high"%a
print r                             # output r

अंतिम पंक्तियों में भी बदलाव हो सकता j=0; if [z]*3==v:r="three %ss"%i(z)है if [z]*3==v:r="three %ss"%d[z][0]लेकिन यह
डेड पॉसम

1
यह "छक्के" विफल हो सकता है
नहीं कि

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