বদুগি, কে জিতল?


9

দ্বারা অনুপ্রাণিত এই প্রতিদ্বন্দ্বিতা এবং এর সাথে সম্পর্কিত এই এক

পটভূমি

বদুগি [bæduːɡiː] হ'ল নিম্ন বলের ড্র-পোকার বৈকল্পিক।

অনলাইন জুজু এর Pokerstars বিশ্বকাপ $ 1K ঘটনা মধ্যে শুরু হয় 3 ঘন্টা এবং আমি জানতে চাই কিভাবে ভাল আমার হাত হয় প্রয়োজন হবে!

গেমটি চারটি স্যুট এবং তেরো র‌্যাঙ্কের 52 কার্ডের একটি মানক ডেক ব্যবহার করে। স্যুটগুলি সীমানাবিহীন এবং লেবেলযুক্ত হবে cdhs; র‌্যাঙ্কস - সর্বোচ্চ Kথেকে নিম্নতম A- অর্ডার দেওয়া হয় KQJT98765432A। যেমন সম্পূর্ণ ডেকটি নীচে হিসাবে উপস্থাপিত হতে পারে (স্থান পৃথক):

Kc Kd Kh Ks Qc Qd Qh Qs Jc Jd Jh Js Tc Td Th Ts 9c 9d 9h 9s 8c 8d 8h 8s 7c 7d 7h 7s 6c 6d 6h 6s 5c 5d 5h 5s 4c 4d 4h 4s 3c 3d 3h 3s 2c 2d 2h 2s Ac Ad Ah As 

প্রতিটি খেলোয়াড়কে ডেক থেকে চারটি কার্ড ডিল করা হয় , সেখানে চারটি বাজি রাউন্ড রয়েছে যার মধ্যে তিনটি অঙ্কন রাউন্ড রয়েছে (একজন খেলোয়াড়ের সবসময় চারটি কার্ড থাকে, তাদের কাছে প্রতিটি কার্ডের সাথে নতুন কার্ডের সাথে তাদের কার্ডের 0-4 পরিবর্তন করার বিকল্প রয়েছে) তিনটি অঙ্কনের রাউন্ডের)।

এই সমস্ত রাউন্ডের পরে যদি একাধিক খেলোয়াড় এখনও সক্রিয় থাকে তবে সেখানে শোডাউন হয়, তারপরে সবচেয়ে শক্তিশালী হাত (গুলি) বিজয়ী বেটে জিততে পারে।

গেমটি নিম্ন-বল খেলানো হয়, তাই সর্বনিম্ন হাতে জয় হয় এবং উপরে উল্লিখিত হিসাবে A(এসেস) কম হয়। তদুপরি হাতের র‌্যাঙ্কিং অন্য প্রকারের জুজুর থেকে পৃথক এবং প্রাথমিকভাবে কিছুটা বিভ্রান্তিকর হতে পারে।

খেলানো "হাত" হ'ল "অফ-স্যুট" (সমস্ত-ভিন্ন-স্যুট) এবং "অফ-র‌্যাঙ্ক" (সমস্ত-পৃথক-র‌্যাঙ্ক) কার্ডগুলি সম্ভব (চারটি ধারণকৃত কার্ড থেকে) সর্বোচ্চ সংখ্যক উভয় থেকে তৈরি সর্বনিম্ন র‌্যাঙ্কিং সংমিশ্রণ combination )। এটি হ'ল: যদি স্বতন্ত্র স্যুট এবং স্বতন্ত্র উভয় স্তরের দুটি কার্ড ধারণ করে তবে কারও কাছে 4-কার্ডের হাত (যাকে "বাদুগি" বলা হয়) থাকে; কারও কাছে যদি 4-কার্ডের হাত না থাকে তবে তার স্বতন্ত্র স্যুট এবং স্বতন্ত্র র‌্যাঙ্কের দুটি কার্ডের কিছু সেট বা সেট থাকে তবে কারও কাছে 3-কার্ডের হাত থাকে (একজন তাদের সেরা চয়ন করে); কারও কাছে যদি 4-কার্ড হাত বা 3-কার্ড হাতে না থাকে তবে কারও কাছে সম্ভবত 2-কার্ড হাত রয়েছে, তবে যদি না হয় তবে 1-কার্ডের হাত নেই।

  • যেমন সেরা সম্ভাব্য হাতটি হ'ল 4-কার্ডের হাত 4-3-2-A- চারটি পৃথক স্যুটের সর্বনিম্ন অফ-র‌্যাঙ্ক কার্ড , প্রায়শই তাকে "নম্বর -1" বলে অভিহিত করা হয়। দুর্বলতম হাতটি হ'ল 1-কার্ডের হাত এবং কেবল সঠিকভাবে ধরে থাকলেই সম্ভব ।KKc Kd Kh Ks

  • লক্ষ্য করুন 4c 3h 2c Asহয় না একটি "সংখ্যা -1", যেহেতু 4cএবং 2cএকই মামলা হয়, কিন্তু এটি হল 3-কার্ড হাতে শক্তিশালী, 3-2-Aএটা অপরের সাথে স্বপক্ষে 3-2-1গুলি (মত Kh 3d 2s Ah) এবং অন্যান্য 3-কার্ড হাতে beats কিন্তু সমস্ত 4-কার্ড হাতে হারিয়ে (যা হিসাবে দুর্বল হতে পারে K-Q-J-T)।

    • অন্যান্য সম্ভাব্য 3-কার্ড হাতে যে থেকে করা সম্ভব হয়েছে 4c 3h 2c Asহয় 4-3-A, কিন্তু যে দুর্বল (উচ্চতর) তাই মনোনীত নয়।
  • একইভাবে 8d 6h 3s 2h3-কার্ডের হাতের মতো বাজানো হয় 8-3-2- 3 আকারের দুটি অফ-র্যাঙ্ক অফ-স্যুট সংমিশ্রণ রয়েছে এবং ছয়টির চেয়ে তিনটি (বা "ট্রে") কম হওয়ায় 8-3-2এটি ভাল (কম) 8-6-3

একে অপরের সাথে হাত তুলনা একই যুক্তি অনুসরণ করে - যে কোনও 4-কার্ড কোনও 3-কার্ডকে মারধর করে, 3 টি কার্ড কোনও 2-কার্ডকে এবং কোনও 2-কার্ড কোনও 1-কার্ডকে মারধর করে, যখন একই সংখ্যার ব্যবহৃত কার্ডের হাতে রয়েছে তাদের সর্বোচ্চ র‌্যাঙ্ক থেকে নীচুতে তুলনা করুন (উদাহরণস্বরূপ: 8-4-2মার 8-5-Aতবে কোনওটির নয় 8-4-A, 8-3-2বা 7-6-5)

চ্যালেঞ্জ:

চারটি কার্ডের প্রত্যেকটিতে দুটি করে আন-অর্ডারেড-সংগ্রহ দেওয়া হয়েছে, একটি বাডুগি শোডাউন জিতবে এমন একটি (গুলি) সনাক্ত করুন (এটি যদি ড্র হয় তবে উভয়কেই সনাক্ত করুন)।

ইনপুটটি যুক্তিসঙ্গত কিছু হতে পারে:

  • উপরের লেবেলযুক্ত আটটি কার্ডের একটি একক স্ট্রিং (স্পেস সহ বা ছাড়াই) বাম চারটি এক হাত এবং ডানদিকে অন্যটি (optionচ্ছিক বিভাজক সহ); বা একই ফ্যাশনে অক্ষরের একটি তালিকা
  • দুটি স্ট্রিংয়ের তালিকা - প্রতি হাতে একটি, বা একই ফ্যাশনে অক্ষরের তালিকাগুলির তালিকা
  • দুটি পৃথক স্ট্রিং বা তালিকার ইনপুট, প্রতি এক হাত
  • হাতে থাকা কার্ডগুলি ইতিমধ্যে খুব আলাদা করা হতে পারে (সুতরাং তালিকার তালিকাগুলির তালিকাই ভাল)

নোট, তবে:

  • কার্ডগুলি ইনপুট দেওয়ার আগে কোনও ক্রমে সাজানো নাও যেতে পারে
  • ... এবং স্যুট এবং র‌্যাঙ্কগুলি এখানে বর্ণিত অক্ষরের লেবেল হিসাবে স্থির করা হয়েছে - যদি আপনার ভাষা এ জাতীয় নির্মাণকে সমর্থন না করে তবে কেবল কিছু যুক্তিসঙ্গত প্রস্তাব দেয় এবং জিজ্ঞাসা করুন যে এটি আপনার ভাষার সীমাবদ্ধতার কারণে কোনও গ্রহণযোগ্য বিকল্প কিনা ask

আউটপুট হয় হওয়া উচিত

  • ইনপুট হিসাবে একই ফর্ম্যাট, বা এর একটি মুদ্রিত উপস্থাপনা; অথবা
  • এর তিনটি স্বতন্ত্র এবং সুসংগত ফলাফল এক হতে (উদাহরণ: "left", "right", "both"অথবা 1, 2, 3; ইত্যাদি)

সত্যিই - যতক্ষণ না এটি স্পষ্ট হয় যে দুটি ইনপুটগুলির মধ্যে কোনটি সনাক্ত করা হচ্ছে তা ভাল হওয়া উচিত।

পরীক্ষার মামলা

input                      ->  output
                                   (notes)
----------------------------------------------------------------------------
3c 2s 4d Ah - As 3h 2d 4h  ->  3c 2s 4d Ah
                                   (4-card 4-3-2-A beats 3-card 3-2-A)

3c 2s 4d Ah - As 2c 3d 4h  ->  3c 2s 4d Ah - As 2c 3d 4h
                                   (4-card 4-3-2-A draws with 4-card 4-3-2-A)

2d Ac 4h 3c - Kh Ad 9s 2c  ->  Kh Ad 9s 2c
                                   (3-card 4-2-A loses to 4-card K-9-2-A)

Kc Tc Qc Jc - Ac Ad Ah As  ->  Ac Ad Ah As
                                   (1-card T loses to 1-card A)

9c 9h Qc Qh - Qs Kh Jh Kd  ->  Qs Kh Jh Kd
                                   (2-card Q-9 loses to 3-card K-Q-J)

2d 5h 7c 5s - 2h 3c 8d 6c  ->  2d 5h 7c 5s
                                   (3-card 7-5-2 beats 3-card 8-3-2)

3s 6c 2d Js - 6h Jd 3c 2s  ->  6h Jd 3c 2s
                                   (3-card 6-3-2 loses to 4-card J-6-3-2)

Ah 6d 4d Ac - 3h 2c 3s 2s  ->  3h 2c 3s 2s
                                   (2-card 4-A loses to 2-card 3-2)

2h 8h 6h 4h - 6d 2d 5d 8d  ->  2h 8h 6h 4h - 6d 2d 5d 8d
                                   (1-card 2 = 1-card 2)

এই , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড প্রতি ভাষা জিতে এবং সংক্ষিপ্ততম কোড সামগ্রিকভাবে জয়ী হয়। গল্ফিংয়ের ভাষাগুলি আপনাকে অন্য ভাষায় জমা দেওয়া বন্ধ না করে এবং ... মজা দেয়!


[['3c', '2s', '4d', 'Ah'], ['As', '3h', '2d', '4h']]যুক্তিযুক্ত কিছু কি ?
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার হ্যাঁ - আমি বলতে যাচ্ছিলাম আমি মনে করি আপনি কেবল Oসামনের দিকে যুক্ত করতে পারেন ।
জোনাথন অ্যালান

উত্তর:


2

পার্ল 6 , 128 বাইট

{.map({.combinations(1..4).grep({!.join.comb.repeated}).map({-$_,$_».trans('ATK'=>'1BZ')».ord.sort(-*)}).min}).minpairs».key}

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

হাতের একটি তালিকা নেয় (দু'জনেরও বেশি) যা কার্ডগুলির তালিকাগুলি যা তার মতো স্ট্রিং Kc। সর্বনিম্ন স্কোর সহ হাতের সূচকগুলি দেয়। দুই হাতের জন্য এটি হ'ল (0)যদি প্রথম হাত জিততে থাকে, (1)যদি দ্বিতীয় হাতটি জিততে থাকে এবং (0, 1)ড্র করার জন্য।

ব্যাখ্যা:

{
    # Map hands to best "played hand".
    .map({
        # Generate all combinations of length 1 to 4.
        .combinations(1..4)
        # Remove hands with repeated characters.
        .grep({!.join.comb.repeated})
        # Map to a cmp-arable representation. This works because
        # lists are compared element-wise. Translate some characters
        # so that ASCII order works. Sort in reverse order so that
        # element-wise comparison will go from highest to lowest.
        .map({ -$_, $_».trans('ATK'=>'1BZ')».ord.sort(-*) })
        # Find best hand.
        .min
    })
    # Return indices of lowest scoring hands. It's a shame that
    # `minpairs` doesn't support a filter like `min`.
    .minpairs».key
}

আগ্রহের বাইরে কীভাবে <...>আপনার পরীক্ষার জোতা স্ট্রিংগুলির তালিকায় অনুবাদ করে? এটি কি এমন এক ধরনের চিনি যা বলে যে সামগ্রীগুলিকে স্পেসে বিভক্ত করা উচিত?
জোনাথন অ্যালান

@ জোনাথান অ্যালান এটি পার্লের শব্দ উদ্ধৃত করা । 6 সমর্থন পার্ল <a b c>ছাড়াও qw(a b c)পার্ল 5. থেকে
nwellnhof

আচ্ছা এটি খুব সুন্দর এবং নিজের মতো করে দেখুন :)
জোনাথন অ্যালান

2

জাভাস্ক্রিপ্ট (ES6), 209 202 192 182 181 বাইট

7 নাইট সংরক্ষণ করার জন্য 7 বাইট সংরক্ষণ করা

স্ট্রিংগুলির অ্যারের অ্যারে হিসাবে ইনপুট নেয়। রিটার্নস trueযদি প্রথম হাত জয়, falseযদি দ্বিতীয় হাত জয়ী বা 2টাই ঘটনা।

a=>([a,b]=a.map(a=>a.reduce((a,x)=>[...a,...a.map(y=>[x,...y])],[[]]).map(a=>!/(\w).*\1/.test(a)*a.length+a.map(a=>'KQJT98765432A'.search(a[0])+10).sort()).sort().pop()),a==b?2:a>b)

পরীক্ষার মামলা

কিভাবে?

a => (
  // store the best combination for both hands in a and b respectively
  [a, b] = a.map(a =>
    // compute the powerset of the hand
    a.reduce((a, x) => [...a, ...a.map(y => [x, ...y])], [[]])
    // for each entry:
    .map(a =>
      // invalidate entries that have at least 2 cards of same rank or same value
      !/(\w).*\1/.test(a) *
      // the score of valid entries is based on their length ...
      a.length +
      // ... and their card values, from highest to lowest
      // (we map 'KQJT98765432A' to [10 - 22], so that the resulting
      // strings can be safely sorted in lexicographical order)
      a.map(a => 'KQJT98765432A'.search(a[0]) + 10).sort()
    )
    // keep the best one
    .sort().pop()
  ),
  // compare a with b
  a == b ? 2 : a > b
)

তোমার কি দরকার join?
নিল

1

জেলি , 36 বাইট

ẎŒQȦ;L;Ṗ€Ṣ$
“A+KYTE”yḲONŒPÇ€ṢṪµ€⁼€Ṁ$

একজন পরমাণুসদৃশ্য অক্ষরের দুটি তালিকা একটি তালিকা গ্রহণ লিংক
- প্রতিটি একটি স্থান হচ্ছে (যেমন হাতের প্রতিনিধিত্ব পৃথক "Ac 2d 4s 3h")
সঙ্গে বিজয়ী (গুলি) চিহ্নিত দুটি সংখ্যার একটি তালিকা ফেরার 1এবং যে কোনো অভাগা 0
- অর্থাৎ [1, 0]বাম জয়ী =; [0, 1]= ডান জয়; [1, 1]= আঁকুন।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুট দেখুন

কিভাবে?

ẎŒQȦ;L;Ṗ€Ṣ$ - Link 1, sortKey: list of lists of numbers representing some cards (see Main)
Ẏ           - flatten into a single list of numbers
 ŒQ         - distinct sieve (1 at first occurrence of anything, 0 at the rest)
   Ȧ        - Any & All? zero if any are 0 or if empty; 1 otherwise (i.e. playable hand?)
     L      - length of input (number of cards in the hand)
    ;       - concatenate
          $ - last two links as a monad:
       Ṗ€   -   pop each (get just the rank portions)
         Ṣ  -   sort (Main's translation & negation of ordinals ensures A>2>3>...>Q>K)
      ;     - concatenate (now we have [isPlayable; nCards; [lowToHighCards]])

“A+KYTE”yḲONŒPÇ€ṢṪµ€⁼€Ṁ$ - Main link: list of lists of characters, hands
                  µ€     - for €ach of the two hands:
“A+KYTE”                 -   literal list of characters "A+KYTE" (compressing doesn't help - lower case would be “£Ḅṁ⁽>» though -- I'll stick with kyte though it's kind of nice.)
        y                -   translate - change As to +s, Ks to Ys and Ts to Es
                         -               note the ranks are now in ordinal order:
                         -               +<2<3<4<5<6<7<8<9<E<J<Q<Y
         Ḳ               -   split at spaces - split the four cards up
          O              -   to ordinals '+'->43, '2'->50, ...
           N             -   negate - effectively reverse the ordering
            ŒP           -   power-set - get all combinations of 0 to 4 cards inclusive
              Ç€         -   call the last link (1) as a monad for €ach such selection
                Ṣ        -   sort these keys
                 Ṫ       -   tail - get (one of) the maximal keys
                         -                       (the key of a best, playable selection)
                       $ - last two links as a monad:
                      Ṁ  -   maximum (the better of the two best, playable selection keys)
                    ⁼€   -   equals? for €ach (1 if the hand is a winner, 0 if not)

1

পাইথন 3 , 207 204 বাইট

lambda i,j:L(h(i))-L(h(j))if L(h(i))!=L(h(j))else(h(i)<h(j))-(h(i)>h(j))
L=len
def h(l):s=set();return[x[0]for x in sorted(y.translate({65:49,75:90,84:65})for y in l)if not(s&set(x)or s.update(*x))][::-1]

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

জোনাথন ফ্রেচের জন্য 3 বাইট সংরক্ষণ করা

রিটার্নস 1প্রথম হাত জেতে পারেন, -1যদি দ্বিতীয় হাত জয়ী এবং0 ড্র ক্ষেত্রে।

ফাংশন hএকটি তালিকা গণনা করে যা হাতের প্রতিনিধিত্ব করে।

ল্যাম্বদা হাতের দুটি উপস্থাপনা তুলনা করে। আমি মনে করি এটি সংক্ষিপ্ত হতে পারে তবে আমি কেবল তিনটি মান ফিরিয়ে দিতে চেয়েছি এবং তুলনা করার সহজ উপায় খুঁজে পাইনি।


L=lenএর lenসাথে অন্যান্য সমস্ত উপস্থিতি সংজ্ঞায়িত করে এবং প্রতিস্থাপন করে আপনি দুটি বাইট সংরক্ষণ করতে পারেন L
জোনাথন ফ্রেচ 21

এছাড়াও, আপনি সম্ভবত এর s=set()সাথে s={0}এবং এর set(x)&s orসাথে প্রতিস্থাপন করতে পারেনs&set(x)or
জোনাথন ফ্রেচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.