আমাকে ঠকায় প্রতারণা করতে সহায়তা করুন


13

ঠকাই এমন একটি কার্ড গেম যেখানে আপনি নিজের হাত থেকে মুক্তি পাওয়ার চেষ্টা করছেন। একটি পালা মোটামুটি এরকম কিছু দেখায়:

  1. সেই টার্নটি আপনার কী কার্ড র‌্যাঙ্কে খেলতে হবে তা নির্ধারণ করুন। বেশিরভাগ ভেরিয়েন্টে এটি আগের টার্নের চেয়ে এক পদ বেশি।
  2. মুখোমুখি 1-4 কার্ড খেলুন। এগুলি বৈধ র‌্যাঙ্কের সাথে মেলে না। যদি তারা তা না করে তবে এটি একটি প্রতারণা হিসাবে বিবেচিত । এই মুহুর্তে যে কোনও খেলোয়াড় আপনাকে চ্যালেঞ্জ জানাতে পারে ।
    • যদি কেউ আপনাকে চ্যালেঞ্জ করে না, পরবর্তী খেলোয়াড়ের কাছে খেলুন continues
    • যদি কেউ আপনাকে চ্যালেঞ্জ জানায় এবং আপনি প্রতারণা না করেন তবে তাদের খেলে যাওয়া সমস্ত কার্ড নিতে হবে।
    • যদি কেউ আপনাকে চ্যালেঞ্জ জানায় এবং আপনি প্রতারণা করেন তবে আপনাকে খেলে যাওয়া সমস্ত কার্ড নিতে হবে।

কৌশলটি বেশিরভাগ ধাপে ধাপে এবং কার্ড গণনার মিশ্রণ। আমি গণিতে খারাপ, যদিও, তাই আমি চিটকে প্রতারণা করব এবং আমার সাথে একটি বট আনব।

ইনপুট

ইনপুটটি আপনার যে কোনও ক্রম বা বিন্যাসে হবে:

  1. প্লেয়ারের হাত। যদি আমি জানি যে তাদের অবশ্যই কার্ড থাকতে পারে (উদাহরণস্বরূপ, আমি সেগুলি তুলতে দেখেছি), সেগুলি আরোহী ক্রমে তালিকাভুক্ত হবে। কোনও অজানা হিসাবে তালিকাভুক্ত করা হবে ?। উদাহরণস্বরূপ, যদি তাদের ছয়টি কার্ড থাকে এবং আমি জানি যে দুটিটি 1 এর এবং একটি 4 টি, তবে হাতটির বৈধ উপস্থাপনা 114???? সর্বদা পরিচিত কার্ডের পরে তালিকাভুক্ত করা হবে। 141???এবং 11???4উভয়ই অবৈধ ইনপুট এবং আপনার কোডগুলি সেগুলি হ্যান্ডেল করার দরকার নেই।
  2. আমি অবশ্যই জানি কার্ডগুলি তাদের হাতের অংশ নয় (আমার কাছে সেগুলি রয়েছে, আমি দেখেছি অন্য কেউ সেগুলি তুলতে পারে ইত্যাদি)। তালিকাটি র‌্যাঙ্কের আরোহী ক্রমে থাকবে। তালিকাটি খালি থাকতে পারে।
  3. প্লেয়ারটি যে কার্ডগুলি খেলবে বলে দাবি করেছে। যদি তারা 3 7 এর খেলার দাবি করে তবে এখানে একটি সম্ভাব্য ইনপুট হবে 777। কার্ডগুলি সর্বদা একই পদে থাকবে।

খেলানো কার্ডগুলির সংখ্যা সর্বদা 1-4 এবং সর্বদা 0-9 হবে 0 একটি র‌্যাঙ্ক তাদের হাতে কখনও চারবারের বেশি উপস্থিত হবে না।

এটি বৈধ ইনপুট উদাহরণ:

33577??
01555688
55

এটি একটি উদাহরণ অবৈধ ইনপুট:

35377?? # Out of order
7779    # Five 7's in total
23      # Two separate ranks played

আউটপুট

সত্যই মূল্য যদি আমাদের অবশ্যই চ্যালেঞ্জ করা উচিত । আমরা চ্যালেঞ্জ করতে না চাইলে একটি মিথ্যা মান।

আমরা যদি জানি যে তারা প্রতারণা করেছে আমরা সর্বদা চ্যালেঞ্জ জানাই। আমরা জানি তারা প্রতারণা করেছে যদি তারা কার্ড খেলত তবে তারা তাদের কাছে থাকতে পারে না:

12

3  # They don't have any 3's or ?'s    
-------------
12?

33 # Fewer ?'s than played cards
-------------
123?
333
33 # Since we have three 3's they can't have two

অন্য সময় আমরা চ্যালেঞ্জ জানাই যদি তারা তাদের শেষ কার্ড খায়। এমনকি যদি নাটকটির বৈধতা এটি খেলাটি শেষ করে দেয় তবে আমরা এটির পক্ষেও চ্যালেঞ্জ জানাতে পারি।

1

1 # They'd win, so challenge anyway

আরও পরীক্ষার কেস

সত্যবাদী (চ্যালেঞ্জ করা উচিত)

11445678?

22
-------------
????????
4
4444
-------------
12345678

9

মিথ্যা (চ্যালেঞ্জ করা উচিত নয়)

1?
222
2
-------------
12?
22
22
-------------
?????

1111

স্কোরিং

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


7
এটি বুলস * টি :)
জ্যাকসোনাক

কত লোক খেলছে?
জ্যাকসোনাক

@ জ্যাকসোনাক্যাক আপনি কেবল একটি নাটকটি দেখছেন, সুতরাং সেখানে কতজন খেলোয়াড় রয়েছে তা নিয়ে আপনাকে চিন্তা করার দরকার নেই।
হোভারকচ

1
এটি পাহাড়ের রাজা হওয়া উচিত
Vlo

2
দ্বিতীয় মিথ্যা মামলায় আপনার কি চ্যালেঞ্জিং হওয়া উচিত নয়?
স্টিফেনটিজি

উত্তর:



1

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

(h,s,c,g=(a,z=c[0])=>a.split(z).length-1)=>h.length==g(c)|g(h,'?')+g(h)<g(c)|g(h)+g(s)+g(c)>4

কার্ডের তিনটি স্ট্রিং গ্রহণ করে (অক্ষর 0- 9বা ?); অন্যথায় 1, চ্যালেঞ্জের জন্য ফিরে 0। ব্যাখ্যা:

(h,s,c,                 Input parameters
 g=(a,z=c[0])=>         Helper function defaults to claimed card
  a.split(z).length-1   Count cards matching (g(c) == c.length)
)=>h.length==g(c)       Does hand length equal claim length
  |g(h,'?')+g(h)<g(c)   Could hand not contain claimed cards
  |g(h)+g(s)+g(c)>4     Are there too many claimed cards

1

সি # 6, 134 বাইট

using System.Linq;
bool f(string a,string b,string c)=>a.Length==1|a.Count(x=>x==c[0]|x=='?')<c.Length|b.Count(x=>x==c[0])+c.Length>4;

(দ্রষ্টব্য: ওপির উদাহরণের সাথে সামঞ্জস্য রেখে, এই উত্তরটি মিথ্যা ফেরত দেয় এমনকি প্রতিপক্ষের একাধিক কার্ড থাকে এবং তার সমস্ত হাত খেলতে থাকে playing কৌশলটির ক্ষেত্রে এটি সত্য হওয়া উচিত))

ব্যাখ্যা:

a: প্লেয়ারের হাত
b: কার্ডগুলি আমি অবশ্যই জানি ...
c: কার্ডগুলি খেলার দাবি করেছে

Ungolfed:

bool f(string a, string b, string c) => 
    a.Length == 1                               // Last card played
    | a.Count(x => x == c[0] | x == '?' )       // Count no. of cards that surely/may match claimed cards
                                                // Assuming all claimed cards are the same, just compare with c[0]
        < c.Length                              // I'm sure you don't have that many cards...
    | b.Count(x => x == c[0]) + c.Length > 4;   // ... Or that there can't be that many cards in play

না করা উচিত a.Length==1হবে a.Length==c.Length। আপনি আপনার নোটটিতে এরকম কিছু বোঝান বলে মনে হচ্ছে, তবে আপনি জানেন না যে আপনি কোন ওপির উদাহরণটি উল্লেখ করছেন যা আরও কার্ড খেলেছে তা সম্ভব করে তোলে তারপরে প্রতিপক্ষের হাতে যে পরিমাণ কার্ড রয়েছে।
কেভিন ক্রুইজসেন

1

জাভা 8, 169 135 বাইট

(a,b,c)->{int C=c.length();char x=c.charAt(0);return a.length()==C|(a+0).split(x+"|\\?",-1).length<=C|5-(b+0).split(""+x,-1).length<C;}

ব্যাখ্যা:

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

(a,b,c)->{            // Method with three String parameters and boolean return-type
  int C=c.length();   //  The amount of cards played by your opponent this turn
  char x=c.charAt(0); //  The card played by your opponent this turn
  return a.length()==C//  Return true if your opponent played his entire hand (final round)
    |(a+0).split(x+"|\\?",-1).length
                      //   Or the amount of the played card and '?' in your opponent's hand
      <=C             //   is smaller than the amount of cards played
    |5-(b+0).split(""+x,-1).length
                      //   Or if 4 minus the amount of the played card are part of the
                      //   cards you definitely know, 
     <C;              //   is smaller than the amount of cards played
}                     // End of method

দ্রষ্টব্য: স্ট্রিং- (s+0).split("c",-1).length-1এ চরিত্রটি যে পরিমাণে cঘটে তার পরিমাণ দেয় s। সুতরাং উপরের ব্যাখ্যায় মন্তব্যগুলি সঠিক, তবে কোডটি এর কারণে আলাদা হতে পারে। (a+0).split(x+"|\\?",-1).length-1<Cথেকে golfed হয় (a+0).split(x+"|\\?",-1).length<=Cএবং 4-(b+0).split(""+x,-1).length-1<Cকরতে golfed হয় 5-(b+0).split(""+x,-1).length<C

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