ব্র্যাগ হ্যান্ডের নাম দিন


11

পটভূমি

ব্রেগ হ'ল এক কার্ড গেম যা ধারণাটির মতো, তবে পোকারের চেয়ে সহজ। বড়াইয়ের একটি হাত তিনটি কার্ড নিয়ে গঠিত এবং নীচে থেকে নীচে থেকে নীচে অবস্থান করা হয়:

  • তিন রকমের - তিনটি কার্ড একই র‌্যাঙ্ক। "থ্রি কিং" নামে পরিচিত etc.

  • চলমান ফ্লাশ ওরফে স্ট্রেট ফ্লাশ। একই মামলা এবং একটানা র‌্যাঙ্কের তিনটি কার্ড। একটি সহজ রান / সোজা থেকে আলাদা করার জন্য "বাউন্সে" শব্দটি অনুসরণ করে তিনটি কার্ড দ্বারা হাতটির নামকরণ করা হয়েছে, যেমন "বাউন্সে দশ-জ্যাক-কুইন"। নোট করুন একটি টেক্কা হয় উচ্চ বা নিম্ন তবে উভয়ই নয় - "কিং-এস-টু" রান নয়।

  • সরাসরি ওরফে চালান। উপরে হিসাবে কিন্তু স্যুট মেলে প্রয়োজন ছাড়াই। যেমন নামকরণ করা হয়েছে যেমন "দশ-জ্যাক-কুইন"।

  • ফ্লাশ - তিনটি কার্ডই একই মামলা, সর্বোচ্চ র‌্যাঙ্কের নামে যেমন "এস ফ্লাশ"।

  • জোড় - দুটি কার্ড একই র‌্যাঙ্কের সাথে অন্য সংস্করণের র‌্যাঙ্কের তৃতীয়াংশ। "জোড়ের জুড়ি" নামে পরিচিত Name

  • সর্বাধিক র‌্যাঙ্কের নাম অনুসারে অন্য যে কোনও সংমিশ্রণ যেমন "টেক হাই"।

চ্যালেঞ্জ

তিনটি প্লে কার্ড দেওয়া হয়েছে, তারা নিজেরাইয়ের বড়াইয়ের নাম আউটপুট দেয়।

কার্ডগুলি তিনটি 2-চরিত্রের স্ট্রিং হিসাবে ইনপুট হবে বা একক 6-অক্ষরের স্ট্রিং হিসাবে সংযুক্ত হবে (আপনার প্রয়োগটি যেটি পছন্দ করবে), যেখানে প্রতিটি জোড়ের প্রথমটি র‌্যাঙ্ক (2 ... 9, টি, জে, কিউ, কে, এ) এবং দ্বিতীয়টি স্যুটটিকে বোঝায় (এইচ, সি, ডি, এস)।

স্ট্যান্ডার্ড গল্ফিং বিধি প্রযোজ্য - একটি প্রোগ্রাম বা ফাংশন লিখুন যা এই ইনপুটটিকে গ্রহণ করে এবং উপরে বর্ণিত হিসাবে হাতের নাম আউটপুট করে।

আপনি ধরে নিতে পারেন ইনপুটটি বৈধ হবে (উপরের সীমাতে র‌্যাঙ্কস এবং স্যুট, কোনও পুনরাবৃত্তি কার্ড নেই) এবং আপনি যে কোনও ক্ষেত্রে পছন্দ করেন তবে কোনও বিশেষ ক্রমে হবে না।

আউটপুট অবশ্যই সমস্ত মূলধন, সমস্ত নিম্নতর কেস, বা একটি বুদ্ধিমান মূলধন যেমন শিরোনাম কেস বা বাক্য ক্ষেত্রে হওয়া আবশ্যক। সংখ্যাযুক্ত র‌্যাঙ্কগুলি বানান করা উচিত যেমন 10 দশক নয় "দশকে" ens

নমুনা ইনপুট এবং আউটপুট:

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
পিপিসিজিতে আপনাকে স্বাগতম! আমি এখন পর্যন্ত কেবলমাত্র চ্যালেঞ্জকেই ছড়িয়েছি, তবে এটি প্রথম চ্যালেঞ্জের জন্যই শালীন দেখায়। এতে বলা হয়েছে, ভাল চ্যালেঞ্জগুলি লেখা শক্ত এবং ভবিষ্যতের জন্য আমি প্রথমে স্যান্ডবক্সে ধারণা পোস্ট করার পরামর্শ দিচ্ছি যেখানে ডাউনবোটগুলি, ভোট এবং উত্তরগুলি ঝুঁকিপূর্ণ করার আগে আপনি প্রতিক্রিয়া পেতে এবং স্পেসিফিকেশনটির বিশদ উন্নত করতে পারেন যা পরবর্তী পরিবর্তনগুলি দ্বারা অবৈধ হতে পারে চ্যালেঞ্জ।
মার্টিন ইন্ডার

টুইটারে আমি অবশ্যই পরের বার স্যান্ডবক্সে একবার তাকিয়ে থাকব।
আইয়ানএফ 1

আমরা কি টিপলসের অ্যারে হিসাবে ইনপুট পেতে পারি? এছাড়াও, আমরা কি 'কিং ফ্লাশ' এর মতো আউটপুট সংক্ষিপ্ত করতে পারি?
ম্যাথু রোহ

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
@ নোটহাট চার্লস এটি ঠিক করেছে!
স্টিফেন

1
@ স্টেফেন, শিওর D.get(a, b)এর অর্থ কী ডি তে ডি-ডি-এর মান অ্যাক্সেস করুন, যদি ডিফল্ট মান বি দিয়ে কীটি পাওয়া যায় না। এটি লেখার মতোই D[a] if a in D else b, যা লেখার মতোই D[a] if a in D.keys() else b
বেন ফ্রাঙ্কেল

2

পিএইচপি, 413 405 398 409 408 406 398 বাইট

দুর্ভাগ্যক্রমে, পিএইচপি স্ট্রিংগুলির অভ্যন্তরে নেস্টেড অ্যারে রেফারেন্সিং সমর্থন করে না;
এটি আরও 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
;

পিএইচপি> = 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
এটি "ছক্কা" ব্যর্থ হতে পারে
চার্লস

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