এটি কি সোজা ফ্লাশ?


21

সম্পর্কিত: পোকার হাতের নাম দিন

একটি স্ট্রেইট ফ্লাশ হ'ল একটি জুজু হ্যান্ড যা সিক্যুয়াল র‌্যাঙ্কের পাঁচটি কার্ড সমান, সমস্ত একই মামলা। স্ট্রেইট ফ্লাশের অংশ হিসাবে, টেক্কাটি রাজার উপরে বা দু'জনের নীচে অবস্থান করতে পারে। টেক্কাটি উচ্চতর (যেমন A ♥ K (Q ♥ J ♥ 10 an একটি টেক্কা উচ্চ সোজা ফ্লাশ) বা নিম্ন (যেমন 5 ♦ 4 ♦ 3 ♦ 2 ♦ A a একটি পাঁচ-উচ্চতর স্ট্র্যাশ ফ্লাশ) র‌্যাঙ্ক করতে পারে, তবে একই হাতে উচ্চ এবং নিম্ন উভয়কেই র‌্যাঙ্ক করতে পারে না (যেমন Q ♣ K ♣ A ♣ 2 ♣ 3 an একটি টেক্কা-উচ্চ ফ্লাশ, কোনও সরল ফ্লাশ নয়)।

চ্যালেঞ্জ

দেওয়া Nকার্ডগুলি (কোনও যুক্তিসঙ্গত ফর্ম্যাটে) আউটপুট একটি সত্য সত্য যদি পোকার হাতে সরাসরি ফ্লাশ থাকে।

ইনপুট

  • Nকার্ড সংখ্যা। (যে কোনও যুক্তিসঙ্গত বিন্যাসে)

চারটি মামলা রয়েছে; হৃদয়, কোদাল, হীরা এবং ক্লাবগুলি (H, S, D, C)

প্রতিটি স্যুটটিতে 2 থেকে 10 সংখ্যার জন্য একটি করে কার্ড, এবং 4 'ছবি' কার্ড, এস, জ্যাক, কুইন এবং কিং রয়েছে (A, J, Q, K)

দ্রষ্টব্য: আপনি টি হিসাবে 10 নিতে পারেন

আউটপুট

  • Truthy/Falsy মান

পরীক্ষা ক্ষেত্রে

["AS", "2S", "3S", "4S", "5S"] => true

["3D", "9C", "4S", "KH", "AD", "AC"] => false

["5D", "6D", "7D", "8H", "9D", "10D", "JD"] => false

["JC", "7C", "5D", "8C", "AC", "10C", "9C", "5S"] =>true

[] => false

["AS", "2S", "3S"] => false

["JC", "QC", "KC", "AC", "2C"] => false

[ "2H", "3H", "4H", "5H", "6H", "7H"] => true

স্ট্যান্ডার্ড বিধি প্রযোজ্য।

বিজয়ী মানদণ্ড: প্রতিটি ল্যাংয়ের মধ্যে সংক্ষিপ্ততম কোড


1
আমরা কি ধরে নিতে পারি যে হাতে দুটি একই কার্ড থাকবে না?
জো কিং

@ জোকিং হ্যাঁ, আপনার দু'বার বা তারও বেশি একই কার্ড থাকবে না
লুইস ফেলিপ দে জেসুস মুনোজ

4
আমরা তুলতে পারি 10যেমন T?
কেভিন ক্রুইজসেন

@ জোকিং আমি আইআরএল হতে পারে বলে মনে করি না। ;-)
এরিক দি আউটগল্ফার

4
@ এরিক অটগল্ফার আমার কাছে আক্ষরিক অর্থে আমার কাছ থেকে এক মিটার দূরে প্রায় 5 প্যাক মিশ্র কার্ড রয়েছে
জো কিং

উত্তর:


15

পাইথন 2 , 95 বাইট

lambda a:any(set('A234567891JQKA'[i/4:][:5])<={r['HCSD'[i%4]in r]for r in a}for i in range(40))

এটি অনলাইন চেষ্টা করুন!

40 টি সরাসরি স্ট্র্যাশ রয়েছে এবং এটি কেবল তাদের সমস্তটি পরীক্ষা করে। চ্যাস ব্রাউন 2 বাইট সংরক্ষণ করেছেন; জো কিং আরও 4 টি বাঁচিয়েছেন।


1
40 টি রয়েছে, আপনি Aউভয় প্রান্তে ব্যবহার করেছেন সুতরাং আমি বিশ্বাস করি এটি পরিবর্তন 36করা 40উচিত।
জোনাথন অ্যালান

উফফ, আমি গণনা ভাল না? আমি এটা ঠিক করেছি!
লিন


স্যুট-মান ক্রমের অদলবদল করুন এবং যদি শর্তটি সূচকে সরান?
জো কিং


8

আর , 128 126 94 91 বাইট

function(x,r=rle(outer(y<-chartr("J-X","A2-9TJQKAS",LETTERS),y,paste0)%in%x))any(r$l>4&r$v)

এটি অনলাইন চেষ্টা করুন!

@ J.Doe দ্বারা মূল যুক্তিটি যথেষ্ট সংক্ষিপ্ত করা হয়েছে।

বেশিরভাগ আজেবাজেই একটি 26 বাই 26 ম্যাট্রিক্স তৈরি করে তবে 3,4,8 এবং 24 কলামের 10 থেকে 23 কলামগুলিতে সমস্ত কার্ড (নীচে পুনরায় পুনরায় পুনরুদ্ধার করা আছে) অন্তর্ভুক্ত রয়েছে the X এর মাধ্যমে X অক্ষরের বর্ণমালা A, 2-9, T, J, Q, K, A, S এর মাধ্যমে প্রতিস্থাপিত হয়েছে chartr। আমরা বিনামূল্যে সি, ডি, এইচ পাই!

%in%একটি ভেক্টর মধ্যে ম্যাট্রিক্স চ্যাপ্টা কলাম প্রজ্ঞাময়। তারপরে দেখুন TRUEম্যাচের কোনও রান করার জন্য রান-লেংথ এনকোডিং 4 এর চেয়ে বেশি ।


rleএন্ড এর চালাক ব্যবহার outer! এটি দুটি বাইট সংরক্ষণ করে
জেসি

94 বাইট। দুটি পরিবর্তন: একটি প্রতিসম outerকল ব্যবহার করে যা অনেকগুলি অবৈধ কার্ড তৈরি করে এবং inএড়াতে ভেক্টর জবরদস্তি ব্যবহার করে apply। এই কাজ করার জন্য তাদের দুজনকেই থাকতে হবে!
জে .ডো

2
খুব সুন্দর! উত্তর পরিবর্তন করে এটিকে একটি সম্প্রদায় উইকি বানিয়েছে।
এনজিএম

5

জাভাস্ক্রিপ্ট (ES6), 116 বাইট

a=>[...'CDHS'].some(s=>a.map(c=>m|=c.match(s)&&2<<"234567891JQKA".search(c[0]),m=0)|(g=k=>k&&1+g(k&k/2))(m|m>>13)>4)

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

গুলিগুলিমি


5
আমি আপনার "কারিটিং নোটেশন" প্রারম্ভিক লাইনের এতটা অভ্যস্ত হয়ে গিয়েছি যে যখন এটির প্রয়োজন হয় না তখন আমি এটি মিস করি।
এনজিএম

4

ব্র্যাচল্যাগ , 31 বাইট

tᵍkᵐ²cᵐ{ps₅~s"A23456789TJQKA"}ᵉ

এটি অনলাইন চেষ্টা করুন!

 ᵍ                    Group input by
t                     each element's "tail" (i.e. suit)
kᵐ²                   Knife off the suit character from each element in each array
cᵐ                    Concatenate the elements of each suit array into a string
{               }ᵉ    There exists at least one string in that such that
 p                    it has a permutation
 s₅                   which has a substring of length 5
 ~s                   which is also a substring of
 "A23456789JQKA"

3

রেটিনা 0.8.2 , 66 বাইট

J
11
Q
12
K
13
A
1$%'¶14
\d+(.)
$1$&$*
O`
^
¶
((?(1)\1.|¶.+)){5}\b

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা:

J
11
Q
12
K
13

ছবি কার্ডগুলিকে তাদের মানগুলিতে রূপান্তর করুন।

A
1$%'¶14

A 1 বা 14 হতে পারে।

\d+(.)
$1$&$*
O`

মানটিকে অ্যানারিতে রূপান্তর করুন এবং এটিকে প্রত্যয় করুন যাতে কার্ডগুলি সঠিকভাবে সাজান sort

^
¶
((?(1)\1.|¶.+)){5}\b

5 টি কার্ডের সাথে মিল ফেলুন যা প্রতিবার 1 দ্বারা বৃদ্ধি পায় এবং নিশ্চিত করে যে শেষ বৃদ্ধিটি ঠিক 1 ছিল।


2

জাভাস্ক্রিপ্ট (ES6), 106 বাইট

h=>h.map(([r,s])=>[..."HSDCA23456789TJQKA"].map(c=>i+=c==s?i*15:c==r?d[i]=1:1,i=0),d=[])|/(,1){5}/.test(d)

কার্ডের স্ট্রিং উপস্থাপনা, প্রতিস্থাপন একটি অ্যারের গ্রহণ 10সঙ্গে Tএটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

প্রতিটি কার্ডের উপরে আইট্রেট করে এবং তার র‌্যাঙ্ক এবং স্যুটটির অনন্য সংমিশ্রণ থেকে গণনা করে একটি সূচক ব্যবহার করে বুলিয়ানগুলির একটি অ্যারেতে একটি পতাকা সেট করে। এই অ্যারেটি পরে টানা 5 টি সত্যবাদী মানের একটি ধরণের সাথে মিল রেখে অনুমতি দেওয়ার জন্য স্ট্রিংফাই করা হয়।

উদাহরণস্বরূপ, একটি সোজা ফ্লাশ সহ একটি হাত বুলিয়ান অ্যারের সম্পূর্ণ স্ট্রিং উপস্থাপনের একটি স্তর হিসাবে নিম্নলিখিত উত্পাদন করতে পারে: ,,,,1,1,1,1,1,,,,

যেহেতু প্রথম র‌্যাঙ্কের মান (অর্থাত্ এ) স্ট্রিংয়ের শুরু থেকেই অফসেট 1রয়েছে, অ্যারেতে সমস্তর আগে পূর্ববর্তী খালি মান থাকবে , তা নিশ্চিত করে স্ট্রিং উপস্থাপনাটি একটি দিয়ে শুরু হবে,

h =>
    h.map(([r, s]) =>                         // destructure card value, e.g. "JH" => ["J", "H"]
        [..."HSDCA23456789TJQKA"].map(c =>    // mapping accounts for both positions of 'A'
            i +=                              // increment index value
            c == s                            // if found index of suit...
                ? i * 15                      // buffer so that cards from different suits cannot be confused
            : c == r                          // if found index of rank...
                ? d[i] = 1                    // set flag to denote card is in hand
            : 1,
            i = 0
        ),
        d = []
    ) |
    /(,1){5}/.test(d)                         // implicitly converts to string joined with a ,

2
খুশী হলাম। এটি আরও ভোটের দাবিদার, তবে লোকেরা প্রাথমিক পোস্টের কয়েকদিন পরেই চ্যালেঞ্জগুলির প্রতি আগ্রহ হারাতে থাকে।
রিক হিচকক

2

জাভা 10, 189 167 165 164 160 157 156 বাইট

s->{int i=10;for(;i-->0;)i=s.matches("AKQJT98765432A".substring(i,i+5).replaceAll(".","(?=.*$0\\\\1)").replaceFirst(".1","([HSDC])")+".*")?-2:i;return-1>i;}

ইনপুটটিকে একক স্পেস-সীমাবদ্ধ স্ট্রিং (অর্থাত্ "AS 2S 3S 4S 5S") হিসাবে নেয় ।

-২২ বাইটস @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।
-1 বাইট @ অ্যালেক্সারেসেরকে ধন্যবাদ ।

এটি অনলাইনে চেষ্টা করুন।

এর Golfed সংস্করণ কোড যে আমি ব্যবহার করেছি জন্য প্রকল্প ইউলার # 54 , যা আমি প্রাথমিকভাবে regexes করেছিল (মজার জন্য এবং regexes সম্পর্কে আরো জানতে)। রেজেক্সেস না থাকলে এটি সম্ভবত পারফরম্যান্সের জন্য আরও সহজ এবং সহজ ছিল (সম্ভবত এই উত্তরটি গল্ফ করার জন্যও প্রযোজ্য; পরে একবার দেখা হবে)।

ব্যাখ্যা:

s->{                    // Method with String parameter and boolean return-type
  int i=10;for(;i-->0;) //  Loop `i` in the range (10,0]:
    i=s.matches(        //   If the input matches the following regex:
        "AKQJT98765432A".substring(i,i+5)
                        .replaceAll(".","(?=.*$0\\\\1)")
                        .replaceFirst(".1","([HSDC])")
                        //    Five adjacent cards
        +".*")?         //    With optionally zero or more other characters
         -2             //     Set `i` to -2, which also stops the loops at the same time
      :i;               //   Else: leave `i` unchanged to continue
  return-1>i;}          //  Return whether `i` is not -2 (so whether the loop has finished)

অতিরিক্ত রেজেক্স ব্যাখ্যা:

  • "AKQJT98765432A".substring(i,i+5) উপর ভিত্তি করে পাঁচটি সংলগ্ন কার্ড নেয় i
  • .replaceAll(".","(?=.*$0\\\\1)")সেই কার্ডগুলির প্রত্যেককে প্রতিস্থাপন করে "(?=.*c\\1)"( cকার্ড-চরিত্রটি কোথায় )
  • .replaceFirst(".1","([HSDC])")তারপর প্রথম প্রতিস্থাপন করবে \\1সঙ্গে ([HSDC])

অর্থাত্ মান-সীমাতে কার্ডগুলির জন্য স্ট্রেট ফ্লাশ পরীক্ষা করার জন্য মোট রেজেক্সটি [9,5]হয়ে উঠবে:
^(?=.*9([HSDC]))(?=.*8\\1)(?=.*7\\1)(?=.*6\\1)(?=.*5\\1).*$
(দ্রষ্টব্য: পুরো স্ট্রিংটি পরীক্ষা করার জন্য স্পষ্টভাবে লেজ যুক্ত String#matches/ অগ্রণী সংযোজন করা হয়েছে ^...$)) এই রেজেক্সটি করবে:

^(?=.*9([HSDC]))(?=.*8\\1)(?=.*7\\1)(?=.*6\\1)(?=.*5\\1).*$
^                                                         $ Match the entire string
 (?=           )(?=      )(?=      )(?=      )(?=      )    Do positive lookaheads to check
                                                            each card
    .*             .*        .*        .*        .*         With optional leading characters
                                                            in front of every card
                                                        .*  And any trailing characters at
                                                            the end of the entire hand
      9              8         7         6         5        The five adjacent values
        [HSDC]                                              With a suit
       (      )       \\1       \\1       \\1       \\1     which is the same for all cards

1
172 বাইট । আমি কেবল রেজেক্স প্রজন্মকে গল্ফ করেছি: এটি এখনও আপনার অ্যালগরিদম।
অলিভিয়ের গ্রাগোয়ার

1
167 বাইট । আমি অপ্রয়োজনীয় ".*"+উপসর্গটি সরিয়েছি ।
অলিভিয়ের গ্রাগোয়ার

1
@ অলিভিয়ারগ্রোওয়ের ধন্যবাদ! ভাল গল্ফ।
কেভিন ক্রুইজসেন

1
-1 বাইট যদি আপনি ব্যবহার না করে লুপ থেকে বিচ্ছিন্ন হনf
অ্যালেক্সআরেসার 16

1
@ অ্যালেক্সারেসার স্মার্ট, ধন্যবাদ! আর পরিবর্তন করে 2 আরও বেশি বাইট গলফ পেরেছি breakকরতে i=-2এবং ফিরে return-1>i;আপনার পদ্ধতির ব্যবহার (এবং 2 আরও বেশি পরিবর্তন (.)করতে .এবং $1করতে $0)। :)
কেভিন ক্রুইজসেন

1

পরিষ্কার , 145 135 বাইট

import StdEnv,Data.List
?l=or[isInfixOf(map hd h)['A234567891JQKA']\\a<-l,b<-l,c<-l,d<-l,e<-l,h<-[[a,b,c,d,e]]|tl(nub(map last h))==[]]

এটি অনলাইন চেষ্টা করুন!

সরলীকৃত:

? l                                             // function ? taking argument l
  = or [                                        // is at least one of these true
        isInfixOf (map hd h) ['A234567891JQKA'] // do the first characters of a hand appear in this string, in order
        \\ a <- l                               // loop level 1, assigns `a`
           , b <- l                             // loop level 2, assigns `b`
             , c <- l                           // loop level 3, assigns `c`
               , d <- l                         // loop level 4, assigns `d`
                 , e <- l                       // loop level 5, assigns `e`
                   , h <- [[a,b,c,d,e]]         // trick to assign `h`, because it's cheaper than let .. in ..
        | tl (nub (map last h)) == []           // only take the loop iterations where all the suits are the same
       ]

1

জাপট , 37 বাইট

2D অ্যারে হিসাবে ইনপুট নেয়।

"AJQKA"i1Aò2 q)øUñÌòÏ̦XÌÃËmάú5 á5Ãc

চেষ্টা করে দেখুন


ব্যাখ্যা

"AJQKA"                                   :String literal
       i1                                 :Insert at (0-based) index 1
         Aò2                              :  Range [2,10]
             q                            :  Join
              )                           :End insert
               ø                          :Does that string contain any element in the following array?
                U                         :Input
                 ñ                        :Sort
                  Ì                       : By last element (grouping suits together)
                   òÏ                     :Partition between X & Y where
                     Ì                    :  Last element of Y
                      ¦                   :  Does not equal
                       XÌ                 :  Last element of X
                         Ã                :End partition
                          Ë               :Map
                           m              :  Map
                            Î             :   First elements (card values)
                             ¬            :  Join
                              ú5          :  Right pad with spaces to length 5
                                 á5       :  Permutations of length 5
                                   Ã      :End map
                                    c     :Flatten

0

জেলি , 18 বাইট

Ṣœc5Uµ13R;1wṪ€ȧEµƇ

এটি অনলাইন চেষ্টা করুন!

[..., ...][1,13]একজন23456789টিজেপ্রশ্নঃকে[1,4]সিডিএইচএস

আউটপুট ফর্ম্যাট: মিথ্যা হিসাবে খালি তালিকা, সত্য হিসাবে খালি খালি তালিকা।


আমি চশমাগুলিতে এমন কিছু দেখছি না যা প্রস্তাব দেয় যে স্যুট এবং ছবি কার্ডগুলির জন্য পূর্ণসংখ্যার প্রতিস্থাপন করা যেতে পারে - আমি কি কিছু মিস করেছি?
শেগি

@ শেগি আমি ধরে নিলাম যে এটি "যে কোনও যুক্তিসঙ্গত বিন্যাসের" মধ্যে রয়েছে, আমি মনে করি না যে কার্ড খেলতে ইনপুট দেওয়ার ক্ষেত্রে আমাদের খেলাপি আছে।
এরিক দি আউটগল্ফার

0

পিএইচপি , 264 বাইট

এটা তোলে এত প্রতিধ্বনি 1যদি এটি একটি সোজা ফ্লাশ এবং 0বা nullযদি না।

আপনি যদি ফাইলটির নাম দেন 1Xতবে 11 bytesপরিবর্তন করার দরকার নেই বলে আপনি সংরক্ষণ করতে পারবেন $argv[0]। ফাইলের নামটি কেন এটি ভেঙে দিতে পারে তা এই মুহূর্তে নিশ্চিত নয়।

কিছু কারণে স্ট্রিং :;<=>স্ট্রিং সামনে সাজানো পেতে 0123456789দ্বারা asortTio মধ্যে যদিও :;<=>ASCII মান 58-62 আছে এবং 0123456789ASCII মান 48-57 আছে। সুতরাং আপনি যদি টিআইও লিঙ্ক বা নীচে থেকে কোড নেন এবং নীচের টেস্ট স্যুটটি দিয়ে এটি পিএইচপিটেসটার ব্যবহার করেন।

$argb[0] = [".code.tio", "AS", "2S", "3S", "4S", "5S"]; // => true
$argb[1] = [".code.tio", "3D", "9C", "4S", "KH", "AD", "AC"]; // => false
$argb[2] = [".code.tio", "5D", "6D", "7D", "8H", "9D", "TD", "JD"]; // => false
$argb[3] = [".code.tio", "JC", "7C", "5D", "8C", "AC", "TC", "9C", "5S"]; // => true
$argb[4] = [".code.tio", ]; // => false
$argb[5] = [".code.tio", "AS", "2S", "3S"]; // => false
$argb[6] = [".code.tio", "JC", "QC", "KC", "AC", "2C"]; // => false
$argb[7] = [".code.tio", "TC", "JC", "QC", "KC", "AC", "2C"]; // => true
$argb[8] = [".code.tio", "2H", "3H", "4H", "5H", "6H", "7H"]; // => true

for ($z=0; $z<9;$z++){
    $argv=$argb[$z];
    array_shift($argv);
    unset($a,$b,$c,$d,$e,$f,$g,$h,$i);
    $f=false; // not needed, just removes several notices

    // TIO code here

    echo "<br>";

টিআইও কোড

for($b=count($a=$argv);$b;){$a[0]='1X';$a[--$b]=strtr($a[$b],'ATJQK','1:;<=');$a[]=($a[$b][0]==1?">".$a[$b][1]:1);}asort($a);foreach($a as$c){$d[$c[1]][]=$c[0];}foreach($d as$e){if(4<$g=count($e)){for($h=0;$g>$i=4+$h;){$f|=(ord($e[$i])-ord($e[$h++])==4);}}}echo$f;

এটি অনলাইন চেষ্টা করুন!


0

কোটলিন , 226 বাইট

10 টির জন্য ব্যবহৃত টি তাই সমস্ত কার্ডের দৈর্ঘ্য 2 টি অক্ষর।

{h:List<String>->val m=List(4){mutableSetOf<Int>()}
for(c in h)m["CDHS".indexOf(c[1])].add("A23456789TJQK".indexOf(c[0]))
var r=0>1
for(b in m){if(b.contains(0))b.add(13)
for(i in 0..9)r=b.containsAll((i..i+4).toList())||r}
r}

এটি অনলাইন চেষ্টা করুন!


0

পাস্কাল (এফপিসি) , 223 216 210 209 বাইট

var a,b:char;c:set of byte;i:byte;begin repeat readln(a,b);i:=pos(b,'HDC')*14+pos(a,'23456789TJQK');c:=c+[i];if a='A'then c:=c+[i+13]until eof;i:=0;while not([i..i+4]<=c)or(i mod 14>9)do i:=i+1;write(i<52)end.

এটি অনলাইন চেষ্টা করুন!

T10 এর জন্য ব্যবহার করে ইনপুটটিতে প্রতি লাইনে 1 টি কার্ড থাকে।

এখন আমি এটিকে এত গল্ফ দিয়েছি যে কীভাবে এটি আর কাজ করে তা আমি জানি না ...

ব্যাখ্যা:

var a,b:char; //for reading cards
    c:set of byte; //this set is for remembering which cards are present in the input
                   //14 numbers used for each suit
    i:byte;
begin
  repeat
    readln(a,b);             //read rank into a, suit into b and a newline
    i:=pos(b,'HDC')*14+pos(a,'23456789TJQK');
        //temporary use i to calculate corresponding number for the card
        //pos() gives 0 if b is not found
        //1st pos() is for the group of numbers for that suit, 2nd pos() is for offset
    c:=c+[i];                //include i into set
    if a='A'then c:=c+[i+13] //if rank is A, include the number at the end of group as well
  until eof;
  i:=0;
  while not(
    ([i..i+4]<=c) //if NOT 5 cards in a row are present...
    and           //while the check is started from 10 (T)...
    (i mod 14<10) //(otherwise, it is checking across 2 different suits)
  )do i:=i+1;     //increment i, otherwise stop
  write(i<52) //if i<=51, there is a straight flush starting at the card corresponding to i
              //(if there isn't a straight flush, i stops at 252 due to i..i+4, I don't know why)
end.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.