লোড, ডিফেন্ড এবং শ্যুট একটি গেম স্কোর


11

আমি যখন ছোট ছিলাম, তখন এই খেলাটি আমি অনেক খেলতাম।

বিধি

দুটি খেলোয়াড় রয়েছে (আসুন তাদের এ এবং বি কল করুন) এবং প্রতিটি খেলোয়াড় তার হাত বন্দুক হিসাবে ব্যবহার করেন uses তিনটি সম্ভাব্য পদক্ষেপ রয়েছে:

  1. আপনার বন্দুকটিতে গোলাবারুদ লোড করার জন্য হাত।

    প্রতিটি বন্দুক খালি শুরু হয়। লোড করে গোলাবারুদ একে একে বাড়িয়ে দেয়।

  2. অন্য খেলোয়াড়কে গুলি করার জন্য ইশারা করা হাত।

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

  3. শট থেকে নিজেকে রক্ষা করতে অস্ত্রগুলি ক্রস করা।

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

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

প্রতারণার প্রচেষ্টা গোলাবারুদ হ্রাস করে না, তাই এটি কখনই নেতিবাচক হতে পারে না।

চ্যালেঞ্জ

A এবং B খেলোয়াড়দের করা চালগুলি দেওয়া, আউটপুট কোন প্লেয়ার গেমটি জিতেছে: 1প্লেয়ার এ, -1প্লেয়ার বি এবং 0ড্রয়ের জন্য। আপনি রিটার্ন মানগুলির সাথে অন্য কোনও ট্রিপল ব্যবহার করতে পারেন তবে আপনি কোনটি ব্যবহার করেন সে সম্পর্কে আপনার উত্তরে তা উল্লেখ করতে হবে।

খেলাটি হতে পারে:

  • সমস্ত পদক্ষেপ প্রক্রিয়া না করে শেষ;
  • প্রদত্ত পদক্ষেপের সাথে শেষ হয় না, এবং সুতরাং এটি একটি ড্র হিসাবে বিবেচিত হয়।

ইনপুট নেওয়া যেতে পারে:

  • স্ট্রিং হিসাবে
  • পূর্ণসংখ্যার অ্যারে / তালিকা হিসাবে
  • অন্য কোনও উপায়ে যা ইনপুটটির প্রাক-প্রক্রিয়া করে না

সম্পূর্ণ প্রোগ্রাম বা ফাংশন অনুমোদিত। যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর!

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

A: "123331123"
B: "131122332"
    -----^                Player B shoots player A and wins.

Output: -1
A: "111322213312"
B: "131332221133"
    -------^              Player B cheats and loses.

Output: 1
A: "1333211232221"
B: "1213211322221"
    ----------^^          Both players cheat at the same time. The game continues.

Output: 0
A: "12333213112222212"
B: "13122213312232211"
         |       || ^---- Player A shoots player B and wins.
         ^-------^^------ Both players cheat at the same time. The game continues.

Output: 1

1
সম্পর্কিত কোটএইচ (মজার বিষয় হল, আমি কখনই গেমটির এই রূপটি খেলিনি; আমি মনে করি লিঙ্কযুক্ত প্রশ্নটি এমন একজন বন্ধুর দ্বারা অনুপ্রাণিত হয়েছিল, যা অনেক আগেই ছিল যা আমি আর মনে করি না)।
ডুরকনব

উত্তর:


6

জেলি, 33 32 24 বাইট

Zæ%1.»0$+¥\>-‘żZḅ3Ff5,7Ḣ

এই ছাপে 5 পরিবর্তে -1 , এবং 7 পরিবর্তে 1এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

Zæ%1.»0$+¥\>-‘żZḅ3Ff5,7Ḣ  Main link. Argument: A (digit list array)

Z                         Zip; group corresponding digits.
 æ%1.                     Map the digits in (-1.5, 1.5].
                          This replaces [1, 2, 3] with [1, -1, 0].
          \               Cumulatively reduce the pairs by doing the following.
     »0$                    Take the maximum of the left value and 0, i.e., replace
                            a -1 with a 0.
        +¥                  Add the modified left value to the right value.
                          This computes the available ammo after each action. An
                          ammo of -1 indicates a cheating attempt.
           >-             Compare the results with -1.
             ‘            Increment. And unilateral cheating attempt is now [1, 2]
                          or [2, 1], where 1 signals the cheater and 2 the winner.
              żZ          Pair each result with the corr., original digits.
                ḅ3        Convert each pair from base 3 to integer.
                          This maps [1, 2] and [2, 1] to 5 and 7.
                  F       Flatten the resulting, nested list.
                   f5,7   Discard all but 5's and 7's.
                       Ḣ  Grab the first element (5 or 7).
                          If the list is empty, this returns 0.

2

পাইথ, 48 46 49 47 বাইট

.xhfT|M.e,-FmgF.b/<dhkY2S2Q?}b_BS2-FbZ.b,NYCQ)0

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

2 4 বাইট সংরক্ষণের জন্য @ আইসএইচজি ধন্যবাদ !

প্লেয়ার এ এর ​​প্রথম পদক্ষেপের তালিকা এবং প্লেয়ার বি দ্বিতীয়বারের চালগুলির তালিকা সহ 2-টুপল হিসাবে ইনপুট নেয়। চ্যালেঞ্জ হিসাবে আউটপুট একই।

ব্যাখ্যা

সংক্ষিপ্ত বিবরণ

  • প্রথমে আমরা উভয় খেলোয়াড়ের চালগুলি একসাথে গোষ্ঠীভুক্ত করি, তাই আমরা 2-টিউপলগুলির একটি তালিকা পাই।
  • তারপরে আমরা এই টিপলগুলির প্রত্যেকটিকে ফর্মের আরও 2 টি-টুপলে ম্যাপ করি [cheating win, fair win] সম্ভাব্য মান -1, 0, 1রয়েছে, এটি নির্দেশ করতে যে কোনও খেলোয়াড় এই মুহূর্তে জিতেছে -1, 1কিনা ( ) বা যদি খেলাটি চলছে ( 0)
  • এখন আমাদের প্রথম টিউপলটি পাওয়া দরকার যা তা নয় [0,0] , এবং এটির প্রথম অ-শূন্য উপাদান নেওয়া যা বিজয়ীকে নির্দেশ করে

কোড ভাঙ্গা

.xhfT | আমি, -FmgF.b / <dhkY2S2Q?} b_BS2-FbZ.b, NYCQ) 0 # প্রশ্ন = সরানো তালিকার তালিকা

                                      .b, এনওয়াইসিকিউ # উভয় ইনপুট তালিকার উপাদানগুলিকে যুক্ত করুন
       .e # এর সাথে জোড়ার তালিকার উপরে মানচিত্র 
                                                 # বি জোড় এবং কে হচ্ছে এটি সূচক
            মি কিউ # মানচিত্র প্রতিটি সরানো তালিকা d
               .b 2S2 # মানচিত্রটি [1,2] এর বেশি, আমি এম ব্যবহার করতে পারি না কারণ এটি
                                                 # লাম্বদা পরিবর্তনশীল .e থেকে একের সাথে দ্বন্দ্ব
                  <ডিএইচকে # ডি [: কে + 1]
                 / Y # এই তালিকায় 1 বা 2 এর উপস্থিতি গণনা করুন
          -F # (1s এর গণনা) - (2s গণনা), প্রতারণা জয়ের ইঙ্গিত দেয়
                           ?} b_BS2 # যদি বি হয় (1,2) বা (2,1)
                                  -এফবি # পার্থক্য গ্রহণ করুন, ন্যায্য জয়ের ইঙ্গিত দেয়
                                     জেড # অন্য 0, এখনও কোনও বিজয়ী নেই
         , # 2 টি মানটি যুক্ত করুন
     | এম # প্রতিটি ফলাফলের জোড়ের জন্য, যদি প্রথম হয় তবে নিন
                                                 # এটি শূন্য নয়, অন্যথায় দ্বিতীয়টি
   এফটি # সমস্ত শূন্য মানগুলি ফিল্টার করে
.xh # প্রথম মানটি নেওয়ার চেষ্টা করুন যা বিজয়ীকে নির্দেশ করে
                                             ) 0 # যদি সম্ভব না হয় কারণ তালিকাটি খালি রয়েছে
                                                 অঙ্কন নির্দেশ করতে # আউটপুট শূন্য

m|Fdহিসাবে একই |M
isaacg

ধন্যবাদ! আমি সবসময় ভুলে যাই যে Mপাশাপাশি splatting না। বিটিডব্লিউ: আমরা আড্ডায় আলোচিত ল্যাম্বদা ভেরিয়েবলগুলি সম্পর্কিত বিষয়টিটি আমার এখানে বেশ কয়েকটি বাইটের জন্য ব্যয় করে: পি
ডেনকার

,1 2হিসাবে একইS2
isaacg

আমি আরেকটি টেস্টকেস যোগ করেছি;)
সরিয়েছি

@ আইসএইচজি আবার ধন্যবাদ! আমি কীভাবে মিস করেছি জানি না।
ডেনকার

1

পাইথন, 217 বাইট

def f(A,B):
 x=y=0;c=[-1,1,0]
 for i in range(len(A)):
  a=A[i];b=B[i]
  for s in[0,1]:
   if(a,b)==(2,1):return c[s]*c[x<1]
   if(a,b)==(2,3)and x<1:return-c[s]
   x-=c[a-1];x+=x<0;a,b,x,y=b,a,y,x
 return 0

ব্যাখ্যা : পূর্ণসংখ্যার তালিকা হিসাবে A এবং B নেয়। কেবল প্রতিটি জোড়া চালচলনের মধ্য দিয়ে যায়, প্রয়োজনে 1 যোগ বা বিয়োগ করে এবং কেউ প্রতারণা করে বা জিতলে ফিরে আসে returns একই জিনিসটি দু'বার লুপের জন্য, একবার এ এর ​​সরানোর জন্য এবং একবার বি এর চলাচলের জন্য ব্যবহার করে। এক্স 0 থেকে -1 এর নীচে গেলে 1 যুক্ত করে।


1

জাভা, 226 212 200 196 194 বাইট

রি-অর্ডার যুক্তি দিয়ে -14 বাইট

-১২ বাইটস মিস্টার পাবলিককে শুটিংয়ের যুক্তির জন্য কীভাবে একটি টের্নারি অপারেশন ব্যবহার করবেন তা নির্দেশ করে বলে ধন্যবাদ জানায়

-4 বাইটগুলি লোড লজিককে শর্ট-সার্কিটের মাধ্যমে ক্র্যামিং করে যদি

-2 বাইট কারণ ==1=== <2যখন ইনপুট শুধুমাত্র হতে পারে 1, 2,3

(a,b)->{for(int m=0,n=0,w,v,r=0,i=0,x;i<a.length;){w=a[i];v=b[i++];x=w==2?m<1?r--:m--:0;x=v==2?n<1?r++:n--:0;if(r!=0)return r;if(w<2&&++m>0&v==2)return -1;if(v<2&&++n>0&w==2)return 1;}return 0;}

ব্যবহার এবং ইন্ডেন্টেড সংস্করণ:

static BiFunction<Integer[], Integer[], Integer> game = (a,b) -> {
    for(int m=0,n=0,w,v,r=0,i=0,x;i<a.length;) {
        w=a[i];v=b[i++];
        // shoot
        x=w==2?m<1?r--:m--:0;
        x=v==2?n<1?r++:n--:0;
        if(r!=0)return r;
        // load
        if(w<2&&++m>0&v==2)return -1;
        if(v<2&&++n>0&w==2)return 1;
    }
    return 0;
};

public static void main(String[] args) {
    System.out.println(game.apply(new Integer[] {1,2,3,3,3,1,1,2,3}, new Integer[] {1,3,1,1,2,2,3,3,2}));
    System.out.println(game.apply(new Integer[] {1,1,1,3,2,2,2,1,3,3,1,2}, new Integer[] {1,3,1,3,3,2,2,2,1,1,3,3}));
    System.out.println(game.apply(new Integer[] {1,3,3,3,2,1,1,2,3,2,2,2,1}, new Integer[] {1,2,1,3,2,1,1,3,2,2,2,2,1}));
}

গেমের নিয়মগুলির এত সরল বাস্তবায়ন আর নয়, তবে সহজ। প্রতিটি চক্র, এই অপারেশনগুলি করে:

  • অস্থায়ী ভেরিয়েবলগুলিতে লোড সরানো
  • প্লেয়ার শট দিলে
    • গোলাগুলি ছাড়াই: পক্ষপাতিত্ব rহারানোর দিকে প্রতারণা করে
    • সঙ্গে গোলাবারুদ: হ্রাস ammo
  • যদি প্রতারণা rনা 0হয় তবে মানটি ফিরিয়ে দিন কারণ কেউ প্রতারণা করেছে
  • যদি প্লেয়ার পুনরায় লোড হয়
    • বর্ধিত গোলাবারুদ
    • অন্য খেলোয়াড় শট নিলে ফিরতে হবে

x সংকলকটি তৈরি করতে ব্যবহৃত একটি ডামি ভেরিয়েবল আমাকে ত্রৈমাসিক অভিব্যক্তিটি ব্যবহার করতে দেয়।

অপেক্ষা করুন, জাভা পাইথনের চেয়ে ছোট?


আমি আরেকটি টেস্টকেস যোগ করেছি;)
সরিয়েছি

1
@ ওয়াশিংটনগুয়েডস এবং আমার এই ক্ষেত্রে কাজ করে আমার যুক্তি পুনর্নির্মাণের জন্য ধন্যবাদ!
CAD97

আইএফএসগুলি কি টেরিনারিতে তৈরি করা যায়? উদাহরণস্বরূপw==2&&m<1?r--:m++
ডাউনগোট

@ ডাউনগোট অন্যটি অভ্যন্তরের সাথে চলে যদি আপনি এটি লিখেছেন যে তৃতীয়টি কাজ করবে না। যাইহোক, আমি সম্ভবত অভ্যন্তর সঙ্গে এটি করতে পারেন যদি। আমি সুযোগ পেলেই এটি পরীক্ষা করব।
CAD97

1
@ CAD97 @ ডাউনওয়েট আপনি আসলে যদি বিবৃতিগুলির জন্য টার্নারি অপারেটরগুলি ব্যবহার করতে পারেন। প্রথম ত্রৈমাসিকের জন্য, int x=w==2?m<1?r--:r:m--;তারপরে এক্সটি ব্যবহার অবিরত করুন (এটি কেবল চৌম্বকটি পরিচালনা করতে ডামি ভেরিয়েবল) যেমনx=v==2?n<1?r++:r:n--;
মিঃ পাবলিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.