প্লে কার্ড গেম 'ওরলগ' এ একটি 'যুদ্ধ' অনুকরণ করুন


15

আসুন কার্ড গেমের একটি দিকের জন্য একটি সিমুলেশন তৈরি করি, যা আমি ব্যক্তিগতভাবে ডাচ নাম 'ওরলগ' ('ওয়ার'-এ অনুবাদ করে) দ্বারা জানি।

'ওরলগ' কীভাবে কাজ করে?

দুটি ডেকে কার্ড (প্রতিটি দু'জন জোকার সহ) খেলোয়াড়দের খেলার পরিমাণের মধ্যে সমানভাবে বিভক্ত। প্রতিটি প্লেয়ার তাদের নিজস্ব স্টক পরিবর্তন করে, এটিকে সামনে সামনে রেখে দেয় এবং সমস্ত খেলোয়াড় একই সাথে স্টকের প্রথম কার্ডটি খোলায়।
এই 'যুদ্ধের বিজয়ী' এই নিয়মগুলি অনুসরণ করে কার্ডের মান দ্বারা নির্ধারিত হয়: জোকার / এস এস কিংকে পরাজিত করে; রাজা রানিকে পরাজিত করলেন; কুইন জ্যাককে পরাস্ত করে; জ্যাক 10 পরাজিত; 10 পরাজয় 9; .... এছাড়াও, 2 এবং 3 উভয়ই এস / জোকারকে পরাজিত করে। শেষ নিয়মটি এমন একটি চক্রের দিকে পরিচালিত করতে পারে যেখানে 2 বা 3 টি এস বা জোকারকে আঘাত করে, এস বা জোকার অন্য কোনও কার্ডকে পরাজিত করে, যার ফলস্বরূপ 2 বা 3 কে মারবে এই ক্ষেত্রে, 2 বা 3 যুদ্ধে জয়লাভ করে।
(এই কার্ডের খেলায় স্যুটটি অপ্রাসঙ্গিক)

দুই বা ততোধিক খেলোয়াড়ের সমান সর্বোচ্চ কার্ড থাকলে তাদের 'যুদ্ধ' থাকে। এর অর্থ তারা একটি কার্ডকে উল্টে ফেলেছে এবং তারপরে প্রত্যেকে তাদের স্টক থেকে একটি নতুন কার্ড খোলে, আবার সর্বাধিক কার্ড কার আছে তা দেখে। কোনও একক খেলোয়াড় পুরো যুদ্ধে বিজয়ী না হওয়া অবধি এটি চলতে থাকে।
(এই যুদ্ধের সমস্ত কার্ড যুদ্ধে জয়ী খেলোয়াড়ের ফেলে দেওয়া স্তূপে যায় Then এটি অব্যাহত থাকে যতক্ষণ না কোনও প্লেয়ার তার সমস্ত কার্ডের বাইরে চলে যায় এবং তারপরে সর্বাধিক পরিমাণ কার্ডের প্লেয়ার জয়ী হয়))

তিন খেলোয়াড়ের সাথে 'যুদ্ধ' উদাহরণ:

  1. 4, 8, জ্যাক:
    জ্যাক জিতেছে।
  2. 7, এস, কুইন:
    এস জিতেছে।
  3. 10, 10, কিং:
    কিং জিতেছে।
  4. 3, জোকার, 2:
    3 জিতেছে।
  5. এস, জোকার, 2:
    2 জিতেছে।
  6. 3, কুইন, এস:
    3 টি জয়।
  7. কুইন, কুইন, ৯:
    কুইন এবং কুইনের একটি 'যুদ্ধ' হচ্ছে, সুতরাং এটি দুটি নতুন কার্ডের সাথে চালিয়ে যায়: 4, 8;
    8 জয়।
  8. 4, 4, 4: সবার
    একটি 'যুদ্ধ' হচ্ছে, সুতরাং এটি তিনটি নতুন কার্ডের সাথে চালিয়ে যায়: 8, এস, 2;
    2 জয়।
  9. জ্যাক, ৫, জ্যাক:
    জ্যাক ও জ্যাকের একটি 'যুদ্ধ' হচ্ছে, সুতরাং এটি দুটি নতুন কার্ডের সাথে চালিয়ে যায়: 5, 5;
    5 এবং 5 এছাড়াও সমান, সুতরাং 'যুদ্ধ' আবার দুটি নতুন কার্ডের সাথে চালিয়ে যায়: 10, কিং;
    কিং জিতল।
  10. জোকার, জোকার, এস: সকলেরই
    'যুদ্ধ' হচ্ছে, সুতরাং এটি তিনটি নতুন কার্ডের সাথে চালিয়ে যায়: 9, 7, 9;
    9 এবং 9 টিও সমান, তাই দুটি নতুন কার্ডের সাথে 'যুদ্ধ' অব্যাহত রয়েছে: জ্যাক, 3;
    জ্যাক জিতল।

সুতরাং, কোড চ্যালেঞ্জ সম্মুখের:

ইনপুট:

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

আউটপুট:

যুদ্ধে জয়ী প্লেয়ারের সূচি বন্ধ করুন।
আপনি চয়ন করতে পারেন কিনা একটি শূন্য-ইন্ডেক্স (অর্থাত চান 0, 1অথবা 2(বড়) অথবা এক সূচীবদ্ধ আউটপুট 1, 2, 3)।

চ্যালেঞ্জ বিধি:

  • ইনপুটটি এমন একক অ্যারে / স্ট্রিং হবে যা অ্যারের প্রতিনিধিত্ব করবে। সুতরাং এটি সহজ করার জন্য আপনার কাছে অ্যারের অ্যারে থাকতে পারে না। যুদ্ধে অংশ নিচ্ছে না এমন কার্ডগুলির জন্য আপনার কাছে সরোগেট আইটেমও থাকতে পারে না।
  • আমরা চিঠি স্বরলিপির পরিবর্তে ফেস কার্ডগুলির জন্য নম্বর স্বাক্ষর ব্যবহার করি। সুতরাং এস / জোকার = 1; জ্যাক = 11; রানী = 12; এবং কিং = 13
  • এই চ্যালেঞ্জের মধ্যে আমরা ধরে নিতে পারি আমরা সর্বদা 3 জন খেলোয়াড়ের সাথে খেলছি ।
  • প্রথম তিনটি 'যুদ্ধ' শুরু করার ইঙ্গিত দেয়। যখন দুই বা ততোধিক খেলোয়াড়ের একটি 'যুদ্ধ' থাকে তবে অ্যারেতে অবিরত কার্ডগুলি তাদের যুদ্ধের ইঙ্গিত দেয় (এটির আরও পরিষ্কার বোঝার জন্য পরীক্ষার কেসগুলি দেখুন)।

সাধারণ নিয়ম:

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

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

Test case 1:  [4, 8, 11]                 ->  2 (or 3)
Test case 2:  [7, 1, 12]                 ->  1 (or 2)
Test case 3:  [10, 10, 13]               ->  2 (or 3)
Test case 4:  [3, 1, 2]                  ->  0 (or 1)
Test case 5:  [1, 1, 2]                  ->  2 (or 3)
Test case 6:  [3, 12, 1]                 ->  0 (or 1)
Test case 7:  [12, 12, 9, 4, 8]          ->  1 (or 2)
Test case 8:  [4, 4, 4, 8, 1, 2]         ->  2 (or 3)
Test case 9:  [11, 5, 11, 5, 5, 10, 13]  ->  2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3]  ->  0 (or 1)
Test case 11: [13, 13, 4, 1, 3]          ->  1 (or 2)
Test case 12: [13, 4, 13, 2, 3]          ->  2 (or 3)

4
ইংরেজী নামটি আসলে যুদ্ধ (বিয়োগান্ত জোকার এবং বিয়োগ 2-এবং-3-বীট-এস বিধি) is
মার্টিন ইন্ডার

@ মার্টিনএেন্ডার এছাড়াও, যখন কোনও টাই হয়, উভয় খেলোয়াড় 3 টি মুখ নীচে ফ্লিপ করে এবং একটি চতুর্থ মুখোমুখি হয়। চতুর্থটি রাউন্ডের বিজয়ীর সিদ্ধান্ত নেয় এবং ফেস ডাউন কার্ডগুলি "যুদ্ধের লুণ্ঠন"। এছাড়াও, 1 জন খেলোয়াড়ের সমস্ত কার্ড না হওয়া পর্যন্ত খেলাটি চালিয়ে যায় না? আমি জানি না এটি যদি স্থানীয় নিয়ম না হয় তবে অন্য কারও মনে আছে? মনে হয় এভাবেই খেলছি।
ম্যাজিক অক্টোপাস উরান

1
@ ম্যাজিক অ্যাক্টোপাস ইউরান আমার মনে আছে একজন খেলোয়াড়ের সমস্ত না হওয়া অবধি খেলা চালিয়ে যাওয়া অব্যাহত পাইলসের উপর দিয়ে উল্টানো।
কামিল দ্রাকারী

1
কমলড্রাকারী হ্যাঁ! আমিও এইভাবে খেলেছি। আমি লুইজিয়ানা এ খেলতে বড় হয়েছি।
ম্যাজিক অক্টোপাস উরন

@ ম্যাজিক অ্যাক্টোপাস উর্ন আমার অভিজ্ঞতা মিনেসোটা থেকে, এবং যেহেতু আমাদের কাছে এখন 2 ডেটা পয়েন্ট রয়েছে আমি মনে করি এটি নিরাপদ বলে আমেরিকা সমস্তই একই রকম।
কামিল দ্রাকারী

উত্তর:


4

q - 142 টি অক্ষর

{p:til 3;while[1<(#:)p;h:(n:(#:)p)#x;x:n _x;$[1~min h;p:$[max a:h in(2;3);$[1<(#:)(?:)h(&:)a;p(&:)h=3;p(&:)a];p(&:)h=1];p:p(&:)h=max h]];(*:)p}

দ্রষ্টব্য: শূন্য সূচকযুক্ত।

Q এ স্ট্ডিন পড়ার কোনও ধারণা নেই, সুতরাং আপনার এটি ফাংশন হিসাবে বলা উচিত: {p:til 3;while[1<(#:)p;h:(n:(#:)p)#x;x:n _x;$[1~min h;p:$[max a:h in(2;3);$[1<(#:)(?:)h(&:)a;p(&:)h=3;p(&:)a];p(&:)h=1];p:p(&:)h=max h]];(*:)p}[1,2,3]

বেশ দীর্ঘ, আসলে, তবে প্রচুর কর্নারের কেস রয়েছে। এটি সক্রিয় প্লেয়ারদের একটি রোস্টার রাখে এবং কার্ডের তালিকাকে একটি লুপে গ্রাস করে। সর্বাধিক সমস্যাযুক্ত জিনিসটি হ'ল হাতের মতো যথাযথ বিজয়ী সনাক্ত করা [13, 2, 3], যেহেতু 3বীট 2, স্বাভাবিক হিসাবে, তবে কোণার ক্ষেত্রে এটিকে নকল করতে হয়েছিল।


3

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

f=a=>(b=a.splice(0,3)).filter(m=>m-n,n=Math.max(...b.includes(1)?b.filter(m=>m<4):b)).length>1?b.indexOf(n):f([...b.map(m=>m-n?0:a.shift()),...a])

একটি শূন্য-ভিত্তিক সূচক প্রদান করে। 127 বাইট যদি আমি প্রাথমিক চুক্তিটিকে পৃথক অ্যারে হিসাবে অনুমতি দিই (এটি অবশ্যই একটি স্বেচ্ছাসেবী সংখ্যার জন্য কাজ করে):

f=(b,a)=>b.filter(m=>m==n,n=Math.max(...b.includes(1)?b.filter(m=>m<4):b)).length<2?b.indexOf(n):f(b.map(m=>m-n?0:a.shift()),a)

0

জাভা 8, 257 বাইট

int c(int[]a){int t=0,f=0,q,r=0,i=-1,l=a.length,x[];for(;++i<3;t=a[i]>t?a[r=i]:t)a[i]+=a[i]==1?f++*0+13:0;for(;i-->0;t=f>0&a[i]<4?t!=3?a[r=i]:t>a[i]?a[r=i]:t:t);for(f=-1,x=new int[q=l<7?3:l>7?l-3:5];l>3&++i<q;)x[i]=t==a[i]|i>2?a[++f+3]:0;return l>3?c(x):r;}

ঠিক আছে, আমার চ্যালেঞ্জ আমার চেয়ে কঠিন, আমি ভেবেছিলাম যে এটির মতো একক অ্যারেতে এটিই হবে। ;) তবে যেহেতু আমি এই চ্যালেঞ্জটি পোস্ট করেছি তার আগে আমার বছরেরও বেশি সময় হয়েছে, তাই আমি নিজেই এটি চালিয়ে যাওয়ার সিদ্ধান্ত নিয়েছি। একাধিক কাজের চারিদিক এবং কৌতুক নিয়ে আমাকে বেশিক্ষণ নিয়ে গেলেন .. সুতরাং অবশ্যই এটি আরও কিছুটা গল্ফ করা যেতে পারে তবে আমি এটি অন্য সময় সন্ধান করব। এটি ইতিমধ্যে আমার প্রত্যাশার চেয়ে অনেক বেশি সময় নিয়েছে ..

ব্যাখ্যা:

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

int c(int[]a){      // Method with integer-array parameter and integer return-type
  int t=0,f=0,q,    //  Temp integers
      r=0,          //  Result-integer
      i=-1,         //  Index-integer
      l=a.length,   //  Length of the input-array
      x[];          //  Temp array we use when there is a war
  for(;++i<3;       //  Loop (1) from 0 to 3 (exclusive)
      t=            //    After every iteration, change `t` to:
        a[i]>t?     //     If the current item is larger than `t`:
         a[r=i]     //      Use the current item (and save its index in `r`)
        :           //     Else:
         t)         //      Leave `t` the same
    a[i]+=a[i]==1?  //   If the current item is a 1 (Ace/Joker):
         f++*0      //    Increase `f` by 1,
         +13        //    and change the 1 to 14 (by increasing with 13)
        :           //   Else:
         0;         //    Leave the current item the same (by increasing with 0)
                    //  End of loop (1) (implicit / single-line body)
  for(;i-->0;       //  Loop from 2 down to 0 (inclusive)
    t=f>0&a[i]<4?   //   If a Joker/Ace was present, and the current item is 2 or 3:
       t!=3?        //    And if it's not a 3 (so either 2 or 14)
        a[r=i]      //     Change `t` to the current item (and save its index in `r`)
       :t>a[i]?     //    Else-if the current item is 2, and `t` is a Joker/Ace:
        a[r=i]      //     Change `t` to the current item (and save its index in `r`
       :            //    Else:
        t           //     Leave `t` the same
      :             //   Else:
       t            //    Leave `t` the same
  );                //  End of loop (2)
  for(f=-1,         //  Reset `f` to -1
      x=new int[    //  Create the temp array `x` with length:
       q=l<7?       //   If the current length is 6 or lower:
          3         //    New length after war is 3
         :l>7?      //   Else-if the current length is 8 or higher:
          l-3       //    New length after war is current length - 3
         :          //   Else(-if current length is 7)
          5];       //    New length after war is 5
      l>3&          //  If there is a war:
          ++i<q;)   //   Loop (3) from 0 to the new length (exclusive)
    x[i]=t==a[i]    //    If the current item is at war,
         |i>2?      //    or the current item is after the first 3 items:
          a[++f+3]  //     Fill the new array with the correct next item
         :          //    Else:
          0;        //     Fill the item of the new array with 0
                    //     (since it won't participate in the next round)
                    //   End of loop (3)
  return l>3?       //  If there was a war:
          c(x)      //   Recursive-call with the new array
         :          //  Else:
          r;        //   Return the index of the card that won
}                   // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.