নাম পোকার হাত


22

নাম পোকার হাত

পাঁচটি কার্ড দেওয়া, পোকার হাতের নাম আউটপুট করুন, যা এর মধ্যে একটি হবে:

High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush

যদি সন্দেহ হয় তবে http://en.wikedia.org/wiki/List_of_poker_hands এ নিয়মগুলি দেখুন ।

ইনপুট

স্টিডিন বা কমান্ডলাইন আর্গুমেন্ট থেকে 5 কার্ড । কার্ডটি হ'ল ফর্মের একটি দুটি অক্ষরের স্ট্রিং RS, যেখানে আর পদমর্যাদাগুলি এবং এস স্যুট। পদমর্যাদার হয় 2- 9(নম্বর কার্ড), T(দশ), J(জ্যাক), Q(রানী), K(রাজা), A(ACE)। মামলা হয় S, D, H, Cকোদাল, হীরা, হৃদয় ও ক্লাব যথাক্রমে জন্য।

কার্ডের উদাহরণ

5H - five of hearts
TS - ten of spades
AD - ace of diamonds

ইনপুট এর উদাহরণ => পছন্দসই আউটপুট

3H 5D JS 3C 7C => One pair
JH 4C 2C JD 2H => Two pair
7H 3S 7S 7D 7C => Four of a kind
8C 3H 8S 8H 3S => Full house

বিধি

সংক্ষিপ্ততম কোড জিতেছে

সম্পাদন করা

এখন পর্যন্ত দুর্দান্ত দেখাচ্ছে! আমি সত্যিই সমস্ত উত্তরগুলি যাচাই করতে পারি না, যেহেতু আমি এই ভাষাগুলি খুব ভাল জানি না এবং সেগুলির জন্য সংকলক / দোভাষী নেই, তবে আমি সন্দেহ করি যে এসেস সম্পর্কে সকলেই ভাবেননি যে এসিস উভয়ই সর্বোচ্চ এবং উভয়ই হতে পারে সোজা (ফ্লাশ) এর সর্বনিম্ন কার্ড


2
স্ট্যাক ওভারফ্লোতে একটি অস্পষ্টভাবে সম্পর্কিত পুরাতন রয়েছে
ডিএমকেকে

আমাদের কীভাবে হাতের নামগুলি আমাদের পছন্দসই হিসাবে মূলধন করার অনুমতি দেওয়া হচ্ছে?
মিঃ উইজার্ড

মিঃ উইজার্ড, অবশ্যই।
দানিরো

উত্তর:


3

গল্ফস্ক্রিপ্ট ( 209 208 207 206 200 199 197 অক্ষর)

3/zip:^0={10,''*"TJQKA"+?}/]:?15,{?\{=}+,,}%2,-$6,14.),++@$/):|;[!!2*^1=.&,(!+5+]or{/}*'Full house
Two pair
One pair
ThreeKFourKHigh card
Flush
Straight''K'/' of a kind
'*n/~|1$"Royal"if" "+2$+](=

আমি মূলধনকে টুইট করার প্রস্তাবিত স্বাধীনতাকে কাজে লাগাচ্ছি: আমার স্ট্রেট ফ্লাশ এবং রয়েল ফ্লাশ উভয়ই ফ্লাশ থেকে শব্দটিকে পুনরায় ব্যবহারের জন্য ফ্ল্যাশকে মূলধন করে।

দ্রষ্টব্য: কিছু পূর্ববর্তী সংস্করণগুলি বগি ছিল: জুটি রাজকীয়ের চেয়ে জোড়ের দাম কম হলে তারা কেবলমাত্র পুরো ঘরটি সমর্থন করে। এগুলির - 0সাথে স্পেস পৃথক করে প্রতিস্থাপন করে এগুলি সংশোধন করা যায় $

ডেমো


এখন এটি একটি গল্ফ প্রোগ্রাম! আমি এটি সংক্ষিপ্ত করার উপায়গুলি খুঁজছি, তবে কিছুই দিয়ে আসতে পারি না। ব্যবহার .&একটি স্ট্রিং স্বতন্ত্র অক্ষর খুঁজে পেতে খুব দরকারী কৌতুক।
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf, এটি মোটামুটি মানক কৌশল standard হাওয়ার্ড তার সমাধানে এটিও ব্যবহার করে।
পিটার টেলর

8

আমার নিজের একটি উত্তর নিয়ে হাজির হয়েছিল :)

পাইথন - 312 301 298

R,K,F,S,g=' 23456789TJQKA2345A',' of a Kind','Flush','Straight ',sorted
s,r=''.join(g(raw_input(),key=R.find)).split()
n,m=g(map(r.count,set(r)))[-2:]
print[[F,[0,'High Card','TOwnoe'[n&1::2]+' Pair',['Full House','Three'+K][n&1],'Four'+K][m]],[[S,'Royal '][r[0]=='T']+F,S]][r in R][len(set(s))>1]

একটি 2x2 তালিকা তৈরি করে যেখানে দুটি মাত্রার সূচকগুলি ফ্লাশ এবং সোজা জন্য বুলিয়ান চেক হয়। উভয়ের ক্ষেত্রে, আমরা এটি কোনও রাজকীয় ফ্লাশ বা কেবল একটি সরল ফ্লাশ কিনা তা পরীক্ষা করে দেখি। ফ্লাশ না করার জন্য এবং সোজা না হয়ে আমরা অন্য হাতগুলির জন্য যাচাই করি: mএবং nএকই এবং র‌্যাঙ্ক কার্ডের সর্বোচ্চ এবং দ্বিতীয় সর্বোচ্চ পরিমাণ ধারণ করে; হাতের নাম অনুসারে সূচী সহ একটি তালিকায় সংরক্ষণ করা হয় m। এই তালিকার মানগুলির মধ্যে সাব-চেক nদুটি জোড় থেকে এক জোড়া এবং ঘর থেকে তিন ধরণের আলাদা করতে হয়।

সম্পাদনা: মোট 20 টি চরিত্রের জন্য ধন্যবাদ নোলেন রয়্যালটি!


1
... এবং আমার মার।
মিঃ উইজার্ড

নতুন সমাধানটি পছন্দ করুন, ৩১২ টি অক্ষর বেশ ছোট। এক বনাম দুটি জোড়া নিয়ে কাজ করার খুব চালাক পদ্ধতি: ডি
নোলেন রয়্যালটি

ধন্যবাদ :) আপনি চাইলে এটি চেষ্টা করার জন্য আপনাকে স্বাগত জানাই। তবে আপনি সম্ভবত আমার এম এবং এন এর মতো কোনও ভেরিয়েবল ব্যবহার করছেন না। এটি পরীক্ষা করে আবার আপনার কোডটি দেখে, আমি বুঝতে পেরেছি যে আমি আসলটিতে আরও কিছু শেভ করতে পারি ^^
দানিরো

1
না আপনাকে স্যুইচ করার দ্বারা অন্য 8 অক্ষর হারান গেল m,n=g([c.count(x)for x in set(r)])করার m,n=g(map(c.count,set(r)))?
নোলেন রয়্যালটি

ওহ, আপনি ঠিকই ঘৃণা করতে পারলাম আমি: ডি কেন জানি না তা আমার মন কেড়েছে। ভাল ধরা, ধন্যবাদ!
ডানিরো

5

রুবি ১.৯ (427 359 348 338 296 292)

সম্পাদনা : কম টেক্কা দিয়ে কাজ করার জন্য স্থির।

o,p=%w(flush straight)
f=/1{5}|1{4}0+1$/
s=[0]*13
puts Hash[*$*.map{|c|s['23456789TJQKA'.index c[0]]+=1;c[1]}.uniq[1]?[f,p,?4,'four'+a=' of a kind',/3.*2|2.*3/,'full house',?3,'three'+a,/2.*2/,'two pair',?2,'one pair',0,'high card']:[/1{5}$/,'royal '+o,f,p+' '+o,0,o]].find{|r,y|s.join[r]}[1]

মূল ধারণাটি হ'ল প্রতিটি র‌্যাঙ্কে কার্ডের পরিমাণের একটি অ্যারে তৈরি করা, অঙ্কগুলিকে স্ট্রিংয়ের সাথে যুক্ত করে তোলা এবং তারপরে কোন হাতের আকারটি খাপ খায় তা দেখতে নিয়মিত অভিব্যক্তি চালানো। আমরা এটি বিভিন্ন ফ্লাশ (ফ্লাশ, স্ট্রেইট ফ্লাশ, রয়েল ফ্লাশ) এর বিপরীতে পরীক্ষা করতে হবে বা অন্য আকারগুলিতে (অন্য কিছুর জন্য) পৃথক স্যুটগুলির সংখ্যা গণনা করি।

কার্ডগুলি পৃথক কমান্ড-লাইন আরোগুলি হিসাবে গ্রহণ করে, যেমন:

>ruby poker-hand-golf.rb 3H 5D JS 3C 7C
one pair

4

সি, 454 টি অক্ষর

#define L for(a=1;a<6;a++)for(b=0;b<13;b++)
#define U u[b+6]
#define R(x,y) if(x)puts(#y);else
b,f,r,h=0,s=0,u[20]={0};main(int a,char**v){L U+=v[a][0]=="23456789TJQKA"[b];f=v[1][1];L{if(v[a][1]!=f)f=0;u[a]+=a==U;if(b>7)h+=U;if(a*13+b<64||!U)r=0;else if(++r==5)s=1;}R(f&&h==25,Royal flush)R(f&&s,Straight flush)R(u[4],Four of a kind)R(u[3]&&u[2],Full house)R(f,Flush)R(s,Straight)R(u[3],Three of a kind)R(u[2]==2,Two pair)R(u[2],One pair)R(h,High card);}

কমান্ড লাইন থেকে কার্ড সহ আর্গুমেন্ট হিসাবে চালান, যেমন। /A.out 8C 3H 8S 8H 3S

মন্তব্য সহ প্রসারিত সংস্করণ:

#define L for(a=1;a<6;a++)for(b=0;b<13;b++)
#define R(x,y) if(x)puts(#y);else
#define U u[b+6]
b,f,r,h=0,s=0,u[20]={0};
main(int a,char**v){
    // card usage - u[6..]
    L U+=v[a][0]=="23456789TJQKA"[b];
    // NOTE: lets expand the inner body of the loop in the answer so this looks more sane:
    // flush
    f=v[1][1];L if(v[a][1]!=f)f=0;
    // count of usages - u[0..5] 
    L u[a]+=a==U;
    // high cards x5
    L if(b>7)h+=U;
    // straights
    L if(a*13+b<64||!U)r=0;else if(++r==5)s=1;        
    // display
    R(f&&h==25,Royal flush)
    R(f&&s,Straight flush)
    R(u[4],Four of a kind)
    R(u[3]&&u[2],Full house)
    R(f,Flush)
    R(s,Straight)
    R(u[3],Three of a kind)
    R(u[2]==2,Two pair)
    R(u[2],One pair)
    R(h,High card);    
}

সম্পাদনা:

  1. লুপগুলি একত্রিত করে এবং পুনরায় ব্যবহার করে 12 টি অক্ষর সংরক্ষণ করা হয়েছে।
  2. স্ট্রিং ধ্রুবকটি ইনলাইন করে 9 টি অক্ষর সংরক্ষণ করা হয়েছে।
  3. ম্যাক্রো, দুষ্টুতে স্ট্রিংফিকেশন ব্যবহার করে 19 টি অক্ষর সংরক্ষণ করা হয়েছে ..

3

গণিত , 365

ডেভিড ক্যারাহারের জবাবটি এখানে দেওয়া।

কিছু পাঠযোগ্যতার জন্য সাদা স্থানের সাথে দেখানো হয়েছে।

If[
  a = Characters;
  x = Thread;
  r = Range;
  d = Sort[a@StringSplit@# /. x[a@"23456789TJQKA" -> 2~r~14]];
  {t, u} = Sort[Last /@ Tally@#] & /@ x@d;
  c = First /@ d;
  f = u == {5};
  S = "Straight";
  c == r[b = d[[1, 1]], b + 4],
  If[f,
   If[c == 10~r~14, "Royal Flush", S <> " flush"], S],
  If[f, "Flush",
   Switch[t,
    {_, 4},    "Four of a kind",
    {2, 3},    "Full house",
    {__, 3},   "Three of a kind",
    {_, 2, 2}, "Two pair",
    {__, 2},   "One pair",
    _,         "High card"]
  ]
] &

এক লাইনের সংস্করণ:

If[a=Characters;x=Thread;r=Range;d=Sort[a@StringSplit@#/.x[a@"23456789TJQKA"->2~r~14]];{t,u}=Sort[Last/@Tally@#]&/@x@d;c=First/@d;f=u=={5};S="Straight";c==r[b=d[[1,1]],b+4],If[f,If[c==10~r~14,"Royal Flush",S<>" flush"],S],If[f,"Flush",Switch[t,{_,4},"Four of a kind",{2,3},"Full house",{__,3},"Three of a kind",{_,2,2},"Two pair",{__,2},"One pair",_,"High card"]]]&

খুশী হলাম। এমনকি আপনি প্যাটার্ন মেলাতে সঞ্চয় করার জন্য জায়গাও পেয়েছেন। যেমন _পরিবর্তে{_,_,_,_}
DavidC

ভাল সমাধান, আপনি উভয়। চরিত্র গণনার খাতিরে, আমি মনে করি যে "জুড়ি" নামটি "ওয়ান পেয়ার" রাখা উচিত, যদিও এটি কিছুটা খারাপ লাগছে, যেহেতু আমি পোস্ট করেছি এবং অন্যরা তা প্রয়োগ করেছি।
ডানিরো

@ দানিরো ধন্যবাদ নাম ঠিক করে দেব।
মিঃ উইজার্ড

3

কে, 294 295

d:{F:"Flush";S:"Straight ";P:" Pair";K:" of a kind";$[(f:1=#?,/-1#'c)&("AJKQT")~a@<a:,/j:1#'c:" "\:x;"Royal ",F;f&s:(4#1)~1_-':a@<a:,/(("A23456789TJQKA")!1+!14)@j;S,F;4=p:|/#:'=j;"Four",K;(2;3)~u:a@<a:,/#:'=j;"Full House";f;F;s;S;3=p;"Three",K;(1;2;2)~u;"Two",P;(1;1;1;2)~u;"One",P;"High Card"]}

k)d'("TS JS QS KS AS";"3S 4S 5S 7S 6S";"JC JH KS JD JS";"JC JH 2S JD 2C";"2C 9C TC QC 6C";"8C 5D 9H 6C 7D";"8C 8D 9H 8S 7D";"8C 8D 9H 2S 9D";"8C 8D 4H 2S 9D";"3C 8D 4H 2S 9D")
"Royal Flush"
"Straight Flush"
"Four of a kind"
"Full House"
"Flush"
"Straight "
"Three of a kind"
"Two Pair"
"One Pair"
"High Card"

সম্পাদনা: এস-লো স্ট্রেইটের জন্য 1 টি যোগ করা হয়েছে


3

পাইথন 334 , 326২২ অক্ষর

p,f,l,t,o=" pair"," of a kind"," Flush","Straight","A23456789TJQK"
v,u=zip(*raw_input().split())
s=''.join(sorted(v,key=o.find))
print{5:"High card",7:"One"+p,9:"Two"+p,11:"Three"+f,13:"Full house",17:"Four"+f,23:t,24:l[1:],25:t,42:t+l,44:"Royal"+l}[(sum(map(v.count,v)),24)[len(set(u))<2]+((0,20)[s=="ATJQK"],18)[s in o]]

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


2

গল্ফস্ক্রিপ্ট, 258 250 টি অক্ষর

3/zip~;.&,(!\{"23456789TJQKA"?}%$.(\{.@- 8%}%\;"\1"-!\.1/.&{1$\-,}%1.$?)"Four"" of a kind":k+{.,2="Full house"{.2\?)"Three"k+{.3-,({.3\?)"One pair"{;"Straight":?;2$2$&{(8="Royal"?if" flush"+}{;?{"Flush""High card"if}if}if}if}"Two pair"if}if}if}if])\;

প্রোগ্রামটি উপরে দেওয়া হিসাবে STDIN এ ইনপুট এবং STDOUT এ আউটপুট প্রত্যাশা করে। আপনি কোডটি নিজেই পরীক্ষা করতে পারেন ।

> 8C 3H 8S 8H 3S
Full house

> 8C 7H 6S TH 9S
Straight

> AH 3H 4S 2H 6S
High card

সম্পাদনা করুন: w0lf এর পরামর্শগুলি অন্তর্ভুক্ত।


চমৎকার সমাধান! আপনি " of a kind"একটি ভেরিয়েবল রেখে 3 টি অক্ষর বাঁচাতে পারেন , কারণ এটি দুটিবার ব্যবহার করা হয়েছে।
ক্রিশ্চিয়ান লুপাস্কু

এটি এর সাথেও কাজ করে"Straight"
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf আপনাকে ধন্যবাদ আমি কোডগুলিতে আপনার পরামর্শ যুক্ত করেছি।
হাওয়ার্ড

আমি মনে করি স্ট্রেইটস সনাক্তকরণের সাথে একটি সূক্ষ্ম ত্রুটি রয়েছে: AH KH 2C 3H 4Hএটি স্ট্রেইট হিসাবে বিবেচিত হয় তবে এটি উচ্চ কার্ড হওয়া উচিত।
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf হুম, আমাকে সে সম্পর্কে ভাবতে হবে ...
হাওয়ার্ড

2

গণিত - 500 494 465 অক্ষর

এই সমাধানটি এড পেগ, জুনিয়র দ্বারা পরিচালিত পোকার প্রদর্শনের উপর ভিত্তি করে তৈরি করা হয়েছে এই সংস্করণে, কার্ডগুলি অভ্যন্তরীণভাবে সংখ্যার মতো বিবেচিতRange[2,14]

v[x_] := Block[{d, t, c, f, s},
 d = Sort@ToExpression[Characters[ImportString[x, "Table"][[1]]] /. {"T" -> 10, "J" -> 11, "Q" -> 12, "K" -> 13, "A" -> 14}];t = Sort /@ Map[Length, Split /@ Sort /@ Transpose@d, {2}];c = d[[All, 1]];f = (t[[2]] == {5});s = c == Range[b = d[[1, 1]], b + 4];
If[s,
 If[f, If[c == 10~Range~14, "royal flush", "straight flush"],"straight"],
 If[ f, "flush",
Switch[t[[1]],
 {1, 4}, "four of a kind",
 {2, 3}, "full house",
 {1, 1, 3}, "three of a kind",
 {1, 2, 2}, "two pair",
 {1, 1, 1, 2}, "one pair",
 {1, 1, 1, 1, 1}, "high card"]]]]

নমুনা ইনপুট, আউটপুট:

উপাত্ত

নোট:

f: ফ্লাশ

সি: কার্ড (মামলা ছাড়াই)

s: সোজা

t: {কার্ড, স্যুট}

ঘ:


ভাল লাগল, তবে কীভাবে দু'জন জুটি বেরোবে JH 4C 2C JD TH?
ডানিরো

আপনি সঠিক. আমি একটি ত্রুটি ঘটেছে যখন আমি কিছু উপাদান একসাথে খাঁটি ফাংশনে যোগদান করি। আমি এটি ট্র্যাক করব।
ডেভিডসি

@ ডানিরো আপনি উত্থাপিত ইস্যুটি সম্বোধন করা হয়েছে।
ডেভিডসি

ডেভিড, এটি সঙ্কোচন করার জন্য অনেক জায়গা আছে। আমি কি?
মিঃ উইজার্ড

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