ব্রিজ হ্যান্ড স্কোরিং


13

চুক্তির সেতুটিকে খুব আকর্ষণীয় করে তোলে এমন একটি জিনিস এর অত্যন্ত জটিল "কৃত্রিম" মেটা গেম। হাত স্কোর করার এই সিস্টেমটি এর একটি ছোট অংশ।

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

স্কোরিং

এখানে একটি নমুনা হাত:

S:KQT5
H:J72
D:965
C:AK8

এস, এইচ, ডি, সি স্যুটগুলির প্রতিনিধিত্ব করে (কোদাল, হৃদয়, হীরা এবং ক্লাবগুলি) এবং বাকিগুলি সেই স্যুটগুলিতে কার্ড। সুতরাং এই হাতে কোদাল (রান্নাঘর) এর রাণী, কোদালদের রাজা (কে), দশটি কোদাল (টি), পাঁচটি কোদাল, হৃদয়ের জ্যাক, অন্তরের সাতটি, ইত্যাদি রয়েছে hand

স্কোরিং সিস্টেমটি নিম্নলিখিতভাবে কাজ করে:

  • আপনার কাছে থাকা প্রতিটি টেকসই (এ) এর জন্য আপনি 4 পয়েন্ট পাবেন, প্রতিটি রাজার (কে) জন্য 3 পয়েন্ট পাবেন, প্রতিটি রানির (প্রশ্ন) জন্য 2 পয়েন্ট এবং প্রতিটি জ্যাকের (জে) জন্য 1 পয়েন্ট পাবেন। অন্য কোনও কার্ড পয়েন্ট দেয় না।
  • স্যুটে চতুর্থটির পরের প্রতিটি কার্ড আপনাকে 1 পয়েন্ট দেয়। সুতরাং আপনার যদি ছয়টি হৃদয় থাকে তবে আপনি 2 পয়েন্ট পাবেন।
  • একটি মামলা যেখানে আপনার কেবলমাত্র দুটি কার্ড রয়েছে আপনাকে 1 পয়েন্ট দেয় (এটি একটি ডাবলটন)। আপনার সবেমাত্র 1 কার্ড থাকা স্যুট আপনাকে 2 পয়েন্ট দেয় (এটি একটি সিঙ্গলটন)। নির্দিষ্ট মামলাতে আপনার যদি কার্ড না থাকে তবে আপনি 3 পয়েন্ট পাবেন (এটি একটি বাতিল) a (সাধারণত আপনার সঙ্গীর সাথে স্যুট করার বিষয়ে একমত হয়ে গেলে এইগুলি গণনা করা হয় তবে চ্যালেঞ্জটিকে আরও আকর্ষণীয় করে তুলতে আমি তাদেরকে অন্তর্ভুক্ত করছি))

সুতরাং, উপরের হাতে 13 পয়েন্ট আছে।

চ্যালেঞ্জ

উপরে প্রদর্শিত বিন্যাসে একটি ব্রিজের হাত দেওয়া, হাতে কতগুলি পয়েন্ট রয়েছে তা গণনা করুন। স্যুটগুলি সর্বদা অর্ডার স্পডস, হার্টস, হীরা এবং ক্লাবগুলিতে তালিকাভুক্ত করা হবে এবং কার্ডগুলি সর্বদা ক্রম এ, কে, কিউ, জে, টি, 9 - 2 অনুসারে বাছাই করা হবে।

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

S:KQT5
H:J72
D:965
C:AK8
       \-> 13

S:AKQT6
H:54
D:J83
C:732
       \-> 12

S:
H:KQT8754
D:A86
C:432
       \-> 15

S:9876
H:843
D:652
C:432
       \-> 0

S:AKQT5
H:AQJ6
D:Q3
C:AK
       \-> 28

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড।

উত্তর:


4

জেলি, 27 25 21 বাইট

ধন্যবাদ -3 বাইটের জন্য ডেনিসকে ধন্যবাদ!

L_5.AḞW+“JQKA”i$€Sµ€S

এটি লাইনগুলির তালিকা হিসাবে ইনপুট নেয়। মাল্টলাইন স্ট্রিং হিসাবে ইনপুট নিতে, প্রাক ṣ⁷µ

ফ্রিকোয়েন্সি পয়েন্টগুলির একটি সারণী তৈরি করা:

Cards:    0  1  2  3  4  5  6 ... 4+k
Points:   3  2  1  0  0  1  2 ... k

আমরা দেখতে পাচ্ছি যে তারা সমান abs(c-3.5)-.5, যেখানে সি কার্ডের সংখ্যা। যেহেতু প্রতিটি লাইনে দুটি অতিরিক্ত অক্ষর থাকে এবং পয়েন্টের সংখ্যা সর্বদা একটি পূর্ণসংখ্যার হয়, floor(abs(l-5.5))এখানেই লাইন দৈর্ঘ্য হয় is

নোট করুন যে জেলির সূচকগুলি 1-ভিত্তিক, এবং মিলহীন মাত্রাগুলিতে ভেক্টরাইজড ফাংশনগুলির আচরণ: দীর্ঘ তালিকার অতিরিক্ত উপাদানগুলি প্রভাবিত নয়। তাই [1] + [3,2,0,0]দেয় [4,2,0,0]

                  µ      The program is two monadic fs applied in turn; an atop.
L_5.AW+“JQKA”i$€S       Helper function:
                 €        For €ach line:
L                         Get the line Length.
 _5.                      Subtract 5.5 (Numeric literals' decimal parts default to .5)
    A                     Apply Absolute value
     Ḟ                    Floor
      W                   Then Wrap it in an array. "S:AKQT6" gives [1].
        “JQKA”i$          Monadic function: index into the string "JQKA".
                €         Apply ^ over €ach char of the line; [3,2,0,0,0].
       +                  Add the two arrays together; [4,2,0,0,0].
                 S        Sum; 6.
                    S    Main link: Sum all results

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


3

ES6, 107 99 89 বাইট

s=>(t=0,[...s].map(c=>t+="JQKA".search(c)+1),s.split`
`.map(l=>t+=(l=l.length-6)^l>>4),t)

2

পাইথ, 27 25 24 বাইট

sms+a5.5ldshMxL"JQKA"d.z

আমরা প্রতিটি স্যুটের জন্য পৃথক করে মানগুলি গণনা করি, তারপরে সেগুলি যুক্ত করি।

  s m                 sum of map lambda d:  (d is a line of input)
      +                 add the
        s a                 floor of the absolute difference between
            5.5               5.5
            l d               and len(d)
          s hM xL           to the sum of the indices each incremented by one
                  "JQKA"      of each char in d in the string "JQKA"
                  d
      .z

টেস্ট স্যুট


1

রেটিনা, 77 59 বাইট

T`AKQJTd`5-1
:(.){0,3}(.)?
$#1$#1$#2 3$0
\S
$0$*1
+`1 1

1

লাইন / লাইন জোড়া দ্বারা ব্যাখ্যা:

  • প্রথম লাইন আমরা অক্ষর রূপান্তর AKQJT987655432করতে 5432111111111। এর অর্থ প্রতিটি স্যুটের জন্য আমাদের একটি যোগফল থাকে। যদি আমাদের 0 1 2 3 4 5 6 7 ...এই মামলাটিতে কার্ড থাকে +3 +1 -1 -3 -4 -4 -4 -4 ...তবে সঠিক স্কোর থেকে যোগফল বন্ধ হয়ে যায়।
  • এটি সংশোধন করতে 2 এবং 3 লাইনে আমরা প্রতিটি লাইনে 3 টি যুক্ত করি এবং একটি স্থানের আগে আমরা মানগুলি যোগ করি যা আমরা বিয়োগ করব। এই বিয়োগের মানটি সর্বোচ্চ 3 কার্ডের দৈর্ঘ্যের দ্বিগুণ এবং কমপক্ষে 4 টি কার্ড থাকলে আরও 1 টি।
  • 4 এবং 5 লাইনগুলিতে আমরা বিভাজক স্থান ব্যতীত অন্য সমস্ত কিছু বাদ দিয়ে অঙ্কগুলিকে অ্যানারিতে রূপান্তর করি।
  • And এবং lines লাইনে আমরা অখণ্ড বিয়োগ করি।
  • 8 লাইনে আমরা 1ফলাফলগুলি গণনা করি যা ফলাফল দেয়।

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



1

স্ট্যাক্স , 18 বাইট

½Γ}♣▓="pì∩û╨▐M↨}╚-

এখন পর্যন্ত সংক্ষিপ্ত উত্তর, জেলিকে পরাজিত (যদিও আমি শীঘ্রই পরাজিত হব বলে আশা করি ...)

চালান এবং অনলাইন ডিবাগ!

ব্যাখ্যা

ব্যাখ্যার জন্য আনপ্যাক করা সংস্করণ ব্যবহার করে।

LZF{"JQKA"I^+i5-:++F5+
L                         Collect input in a list (if this is not needed, we can yet save another byte)
 Z                        Put a zero under the top of the stack, used as the accumulator
  F                       Loop for every suit
   {               F      Calculate the "score" for the string describing the suit
    "JQKA"I^              Find the 1-based index of current character in "JQKA", 0 for not found
            +             Add to the accumulator
             i5-:+        Subtract 5 from the current 0-based index, and take the sign
                  +       Add to the accumulator
                    5+    Add 5 extra points for each suit

এটি অনুবাদ দ্বারা অর্জন করা হয়

  • স্যুটে চতুর্থটির পরের প্রতিটি কার্ড আপনাকে 1 পয়েন্ট দেয়। সুতরাং আপনার যদি ছয়টি হৃদয় থাকে তবে আপনি 2 পয়েন্ট পাবেন।
  • একটি মামলা যেখানে আপনার কেবলমাত্র দুটি কার্ড রয়েছে আপনাকে 1 পয়েন্ট দেয় (এটি একটি ডাবলটন)। আপনার সবেমাত্র 1 কার্ড থাকা স্যুট আপনাকে 2 পয়েন্ট দেয় (এটি একটি সিঙ্গলটন)। নির্দিষ্ট মামলাতে আপনার যদি কার্ড না থাকে তবে আপনি 3 পয়েন্ট পাবেন (এটি একটি বাতিল) a

প্রতি

  • প্রতিটি মামলা জন্য 3 অতিরিক্ত পয়েন্ট স্কোর
  • স্যুটে চতুর্থ হওয়ার আগে প্রতিটি কার্ড আপনাকে -1 পয়েন্ট দেয়, চতুর্থের পরের প্রতিটি কার্ড আপনাকে 1 পয়েন্ট দেয়, চতুর্থ কার্ডের স্কোর 0 করে।

তারপরে আমরা সাইনাম ফাংশনের সম্পত্তিটি ব্যবহার করতে পারি।

এটি করে আমরা কয়েকটি বাইট সংরক্ষণের কার্ডের সংখ্যার সুস্পষ্ট হ্যান্ডলিং এড়াতে পারি।

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