কে স্পেডস ট্রিক জিতল


19

স্পেডসের একটি খেলায় চার কার্ডের ট্রিক কে জিতবে তা নির্ধারণ করার জন্য কোড লিখুন । সবচেয়ে কম বাইট জেতা

ইনপুটটি এমন একটি স্ট্রিং যা চারটি কার্ডকে খেলায় তালিকাভুক্ত করে যেমন TH QC JH 2H(হার্ট অফ টেন অফ হার্টস, ক্লাবের কুইন, জ্যাক অফ হার্টস, হার্টের দুটি)। একটি কার্ড দুটি অক্ষর দ্বারা দেওয়া হয়: একটি মামলা CDHSএবং এর থেকে একটি মান 23456789TJQKA। আপনার গ্যারান্টিযুক্ত যে ইনপুটটি বৈধ এবং কার্ডগুলি পৃথক।

কৌতুকের বিজয়ীর জন্য আপনার 1 নম্বর, 2, 3 বা 4 আউটপুট করা উচিত। উদাহরণস্বরূপ TH QC JH 2H, অন্তরের জ্যাকটি কৌশলটি জিতেছে, সুতরাং আপনার 3 টি আউটপুট করা উচিত।

আপনার ইনপুট এবং আউটপুট অবশ্যই বর্ণিত ঠিক মতো হওয়া উচিত, কেবল নতুন লাইনের linesচ্ছিক ব্যতীত।

কৌতুক জয়ের জন্য এখানে স্পেইডস নিয়ম রয়েছে। বিজয়ী কার্ডটি কয়েকটি ক্যাভেট সহ চারটির সর্বোচ্চ কার্ড। কোদাল হ'ল ট্রাম্প স্যুট , তাই কোনও কোদাল কোনও অ-কোদালকে ছাড়িয়ে যায়। খেলানো প্রথম কার্ডের স্যুটটি সীসা মামলা এবং সেই মামলা বা কোদালগুলির কেবলমাত্র কার্ডটি কৌশলটি জয়ের জন্য উপযুক্ত। একই মামলাগুলির কার্ডগুলি তাদের মানগুলির সাথে তুলনা করা হয়, যা ক্রমবর্ধমান ক্রমে দেওয়া হয় 23456789TJQKA

পরীক্ষার কেস:

TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2

উত্তর:


10

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

J"KTAZ"hxcz)eo_XN+@z1JJcz

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট (প্রথম 4 টি অক্ষর পরীক্ষা স্যুট নির্মাণ)

কৌতুকের জন্য @ আইস্যাককে ধন্যবাদ, যা 2 টি অক্ষর সংরক্ষণ করেছে।

মূল ধারণাটি হ'ল প্রতিটি হাতের অক্ষরটিকে এমনভাবে সংশোধন করা, যাতে বিজয়ী হাতটির সর্বাধিক মান থাকে।

হাতের মানগুলি 23456789TJQKAইতিমধ্যে প্রায় বাছাই করা হয়েছে। আমি প্রতিস্থাপন আছে শুধু Tসঙ্গে A, Kসঙ্গে Tএবং Aসঙ্গে Zসঙ্গে ফলে, 23456789AJQSZ

স্যুটগুলির ক্রম CDHSসর্বাধিক গুরুত্বপূর্ণ নয়। S, সর্বাধিক শক্তিশালী মামলা, যা ইতিমধ্যে সর্বাধিক মান। গুরুত্বপূর্ণ হ'ল প্রথম হাতের স্যুটটি দ্বিতীয় সবচেয়ে শক্তিশালী মান। সুতরাং আমি এই স্যুটটি অনুবাদ করি K

স্যুটটি মানের চেয়ে বেশি শক্তিশালী হওয়ায় সমস্ত হাতগুলিকেও বিপরীত পাঠ করতে হবে।

                           implicit: z = input string
J"KTAZ"                    J = "KTAZ"
             o         cz  orders the hands N of split(z) by:
              _              the reversed of 
               XN+@z1JJ      N, where the values z[1]+J are replaced by J
            e              last element (winning hand)
        xcz)               index of the winning hand in split(z)
       h                   + 1

আমি ছেড়ে দিয়েছি, ভাল খেলেছি: পি
orlp

আমার মনে হয় না যে .eজিনিসগুলি এটির পক্ষে মূল্যবান - oআমি এটির হিসাবে এটির হিসাবে 1 টি অক্ষর ছোট।
isaacg

@ আইস্যাক আপনার অধিকার মজার বিষয় হ'ল, আমার 28 টি সমাধানের আগে 27 টি সমাধান ছিল .e। তবে ২ solution টি সমাধানটি শেষ হয়েছিল )এবং তাই 28 বাইট রয়েছে। : ওহো:
জাকুবে

1
আমি একটি উপায় অন্য 2 অক্ষর সংরক্ষণ করতে চিন্তা থেকে অনুবাদ +@z1"KTA"করতে "KTAZ", কিন্তু এর পরিবর্তে স্ট্রিং ব্যবহার সরাসরি ব্যবহার J"KTAZ"শুরুতে এবং +@z1Jকরার J
isaacg

@ আইস্যাক খুব চালাক ধন্যবাদ। BTW। আমি alচ্ছিক তৃতীয় তর্কটি তৈরি করার বিষয়ে বেশ কিছুক্ষণ ভাবছি X(কেবল যদি a এবং b স্ট্রিং থাকে)। তবে আমি সত্যিই নিশ্চিত নই, যদি Xab)মূল্যায়ন করা উচিত Xab_b(উল্টা বি, এর মতো স্টাফের জন্য ভাল হবে Xa"</\>") বা Xab+tbhb(বি স্থানান্তরিত)। আপনার পছন্দ কি?
জাকুবে

6

সিজেম, 34 33 বাইট

lS/_{)2$0='S+\#\"TQKA"_$er+}$W>#)

অ্যালগরিদম

যুক্তিটি সহজ। আমার একটি কাস্টম বাছাই চলছে, যার মধ্যে আমি প্রথমে মামলাটির প্রতিনিধিত্বকারী দ্বিতীয় চরিত্রটিকে অগ্রাধিকার দেব। এতে স্প্যাডস সর্বোচ্চ অগ্রাধিকার পায় এবং তারপরে প্রথম নিক্ষিপ্ত স্যুট। বাকি সব হয় -1। তারপর আমি এর সোয়াপিং সঙ্গে প্রথম অক্ষর উপর সাজানোর Tসঙ্গে Aএবং Qসঙ্গে Kআভিধানিক শ্রেণীবিভাজন আছে।

কোড ব্যাখ্যা

প্রথমে, কার্ডগুলির মুখের মানগুলির লেজিকাল ক্রম কী তা দেখতে দিন:

"23456789TJQKA"$

23456789AJKQT

সুতরাং, সমস্ত সংখ্যা সঠিক অবস্থানে রয়েছে। Jসঠিক অবস্থানেও রয়েছে। আমরা অদলবদল করার প্রয়োজন Kএবং Qএবং Jএবং Aআভিধানিক অর্ডার জন্য।

lS/_{)2$0='S+\#\"TQKA"_$er+}$W>#)
lS/                                 "Read an input line and split on spaces";
   _{                      }$       "Copy the array and sort it using this custom logic";
     )                              "Take off the last character of each hand.";
      2$0=                          "Get the suit of the first hand";
          'S+                       "Add Spades suit to it";
             \#                     "Get the index of the current hand suit.
                                     1 for Spades, 0 for first hand suit, -1 otherwise";
               \                    "Put face value of this hand on top of stack";
                "TQKA"              "Put string TQKA on stack";
                      _$            "Copy and sort. This essentially reverses the string
                                     TQKA to form AKQT. This is 1 byte shorter than _W%";
                        er+         "Swap T with A and K with Q and add to the
                                     suit index calculated previously";
                                    "After the above tuple, sorting will automatically
                                     convert the tuple to string and sort lexically";
                             W>     "Get the array containing only the last element";
                               #)   "Get the index of this hand in original set and
                                     increment to convert it to 1 based";

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


3

জাভাস্ক্রিপ্ট (ES6), 112

তালিকাটি স্ক্যান করুন এবং পাওয়া সর্বাধিক মানের অবস্থানে ফিরে আসুন।

পরীক্ষার জন্য স্নিপেট চালান (ফায়ারফক্সে)

F=t=>t.split(' ').map((c,i)=>(n='23456789TJQKA'.search(c[0])+(c[1]>'H'?40:c[1]==t[1]&&20))>m&&(m=n,r=i+1),m=0)|r

C.innerHTML=['TH QC JH 2H','KC 5S QS 9C','QD 2D TD 5D','9S 5D AD QS','3D 4C 3H JH','9S 4S TS JS','5H 9H 2C AD','5S 4C 3H QD'].map(h=>h+' -> '+F(h)).join('\n')
<pre id=C></pre>


3

পার্ল, 73 বাইট

#!perl -pl
/\B./;s/$&/P/g;y/TKA/IRT/;$_=reverse;@a=sort split;/$a[-1]/;$_=4-"@-"/3

আমাকে চেষ্টা করুন

কার্ডের নামগুলিকে রূপান্তর করে যাতে গেমের মান ক্রম বর্ণানুক্রমিক ক্রম অনুসরণ করে, তার পরে বাছাইয়ের মাধ্যমে সর্বোচ্চটি বেছে নেয় এবং অবস্থানের জন্য মূল স্ট্রিংয়ে এটি সন্ধান করে।


2

রুবি, 59 + 2 = 61

কমান্ড-লাইন পতাকা সহ na, চালান

p (1..4).max_by{|i|$F[i-1].tr($_[1]+'SJQKA','a-z').reverse}

2

জে, 47 বাইট

1+[:(i.>./)_3+/\16!@-]i.~'SXAKQJT9876543'1}~1&{

ব্যবহার:

   (1+[:(i.>./)_3+/\16!@-]i.~'SXAKQJT9876543'1}~1&{) 'TH QC 9S 8S'
3

পদ্ধতি:

  • প্রতিটি ইনপুট চরের জন্য আমরা 'S[second char of input]AKQJT9876543'স্ট্রিংয়ে এর অবস্থানের ভিত্তিতে একটি মান নির্ধারণ করি । অ- last position + 1সন্ধানকারী অক্ষরগুলি সুস্পষ্টভাবে মানটি পায় । পরবর্তী অক্ষরের মান ( value=(16-position)!) খুব কম থাকে ।
  • 3 ইনপুট-চর ট্রিপলেট এবং একটি ডুপলেট (যেমন TH_ QC_ 9S_এবং 8S) এর জন্য যোগফল গণনা করুন ।
  • সর্বাধিক মানের 1-ভিত্তিক সূচক চয়ন করুন।

(জে দুর্ভাগ্যক্রমে অক্ষর বা স্ট্রিংগুলির সরাসরি তুলনা করতে পারে না It এটি কেবল তাদের সমতা যাচাই করতে পারে যা এই চ্যালেঞ্জের জন্য কিছু অন্যান্য পদ্ধতির বিষয়টি অস্বীকার করেছিল))

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


2

সি #, 237

using System;namespace S{class P{static void Main(string[] a){var V="23456789TJQKA";int x=0;int y=0;var z=a[0][1];for(int i=0;i<4;i++){int q=V.IndexOf(a[i][0])+2;var w=a[i][1];q*=w==z?1:w=='S'?9:0;if(q>y){x=i;y=q;}}Console.Write(x+1);}}}

এটি কীভাবে কাজ করে: কার্ডের "মান" গণনা করার জন্য প্রতিটি হাতকেই আটকান .. সর্বোচ্চ মূল্যবান সূচকটি সংরক্ষণ করুন। কোনও কার্ডের মান কার্ডের র‌্যাঙ্ক হিসাবে 0 দ্বারা গুণিত হয় যদি এটি কোনও কোদাল বা উদ্বোধনী মামলা না হয়, 1 যদি এটি খোলার মামলা হয় এবং 9 যদি এটি একটি কোদাল হয় তবে খোলার মামলা নয়। (9 চুসেন বি / সি 2 * 9 = 18> এ = 14 এবং 9 একক চর)


1

পাইথ, 36 33 বাইট

KczdhxKeo,x,ehK\SeNXhN"TKA""AYZ"K

মোটামুটি সরল পদ্ধতিতে, একটি কাস্টম কী ফাংশন দিয়ে বাছাই ব্যবহার করে, তারপরে সর্বাধিক মানের সূচকটি সন্ধান করে।


আপনি কি বাছাই এড়ানোর চেষ্টা করেছেন এবং সর্বাধিক মান খুঁজে পেয়েছেন? জাভাস্ক্রিপ্টে যা সংক্ষিপ্ত
আকারে

@ edc65 পাইথটিতে সর্বাধিক মান সন্ধান করার জন্য কোনও ক্রিয়াকলাপ নেই। তবে একটি অক্ষর ( e) দিয়ে আপনি শেষ উপাদানটি পেতে পারেন, সুতরাং সর্বাধিক মান সন্ধান করা সর্বশেষ উপাদানটি পেয়ে বাছাই করা হয়।
orlp

ডাউনভোটার, বোঝানোর যত্ন আছে?
orlp

1

পাইথ, 31 বাইট

hxczdeo}\SNo}@z1Zox"TJQKA"hNScz

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

কিভাবে এটা কাজ করে:

এই পদ্ধতিটি পড়ার সঠিক উপায়টি আবার সামনে front প্রক্রিয়াটি তালিকাটির শেষে কাঙ্ক্ষিত কার্ডটি সাজায়, তারপরে এটিকে টেনে এনে মূল তালিকাতে তার সূচকটি সন্ধান করে।

  • cz: এটি কার্ডের স্ট্রিংয়ের তালিকা তৈরি করে। c, কাটা, সাধারণত একটি বাইনারি ফাংশন (আর্টি 2), তবে যখন কেবল একটি ইনপুটতে ডাকা হয়, তখন .split()স্ট্রিং পদ্ধতি হিসাবে কাজ করে ।

  • S: এটি স্বাভাবিক বাছাইয়ের আচরণটি প্রয়োগ করে, যা উচ্চতর কার্ডগুলির আগে কম নম্বরযুক্ত কার্ডগুলি সাজায়।

  • ox"TJQKA"hN: এটি কার্ডের সূচক ( x) দ্বারা "TJQKA"কার্ডের প্রথম অক্ষরের স্ট্রিংয়ে অর্ডার করে ( hN)। সংখ্যাযুক্ত কার্ডের জন্য, প্রথম বর্ণটি পাওয়া যায় না, ফলাফল দেয় -1। পাইথের বাছাইয়ের ক্রিয়াটি স্থিতিশীল হওয়ায়, সংখ্যাযুক্ত কার্ডের অর্ডার প্রভাবিত হয় না।

  • o}@z1Z: এরপরে আমরা আদেশ দিয়েছিলাম যে প্রথম কার্ড খেলে ( @z1) প্রশ্নযুক্ত কার্ডে রয়েছে কিনা । যেহেতু Trueবিভিন্ন ধরণের পিছনে রয়েছে তাই এটি পিছনে Falseসীসা স্যুটগুলির কার্ড প্রেরণ করে।

  • o}\SN: এটি Sপূর্বের বাছাইয়ের মতোই তবে এটি চিঠিটি কার্ডে রয়েছে কিনা তা বাছাই করে পিছনে স্প্যাডস প্রেরণ করে।

  • hxczde: এটি এইভাবে বাছাই করা সর্বশেষ কার্ডটি eবের করে ( ), কার্ডের তালিকায় এটির সূচক খুঁজে পায় ( xczd) এবং বৃদ্ধিগুলি 1 ( h) দিয়ে পছন্দসই প্লেয়ারের অবস্থান দেয়।

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