সংযোগ 4: স্পট স্পট!


35

ব্যাংকটি ভেঙে গেছে, এবং সমস্ত স্থানীয় মাফিয়া ঠগদের একটি অস্বাভাবিক আলিবি রয়েছে: তারা ঘরে বসে কানেক্ট 4 খেলছিল! তদন্তে সহায়তা করার জন্য, আপনাকে বৈধ কানেক্ট 4 গেমের অবস্থানগুলি সত্যই পজিশনগুলি রয়েছে এবং তাড়াতাড়ি একসাথে রাখা হয়নি তা পরীক্ষা করার জন্য জব্দ করা সমস্ত কানেক্ট 4 বোর্ডকে বৈধতা দেওয়ার জন্য আপনাকে একটি প্রোগ্রাম লিখতে বলা হবে সাথে সাথে পুলিশ দরজায় নক করল।

সংযোগ 4 এর নিয়মগুলি: খেলোয়াড়দের Rএবং Yতাদের রঙের টাইলগুলিকে 7x6 গ্রিডের কলামগুলিতে ফেলে দেওয়ার জন্য এনে দেয়। যখন কোনও খেলোয়াড় কলামে একটি টাইল ফেলে দেয়, তখন সেই কলামের সর্বনিম্ন অসম্পূর্ণ অবস্থান দখল করতে এটি পড়ে যায়। যদি কোনও খেলোয়াড় বোর্ডে তাদের রঙের চারটি টাইলের অনুভূমিক, উল্লম্ব বা তির্যক রান পেতে পরিচালিত হয়, তবে তারা জিতে যায় এবং খেলাটি অবিলম্বে শেষ হয়।

উদাহরণস্বরূপ ( Rশুরু সহ), নিম্নলিখিতটি একটি অসম্ভব কানেক্ট 4 অবস্থান।

| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | |
| | |Y| | | | |
|R| |Y| | | | |

আপনার প্রোগ্রাম বা ফাংশন অবশ্যই একটি সংযোগ 4 বোর্ডের মধ্যে নেওয়া উচিত এবং তা আবার ফিরে আসতে হবে

  • একটি মিথ্যা মান, অবস্থানটি অসম্ভব বা ইঙ্গিত করে
  • 1 থেকে 7 পর্যন্ত সংখ্যার একটি স্ট্রিং, সেই অবস্থানের দিকে এগিয়ে যাওয়ার সম্ভাব্য ক্রমগুলি নির্দেশ করে (কলামগুলি বাম থেকে ডানে গণনা 1করা 7হয়, এবং সুতরাং ক্রম 112উদাহরণস্বরূপ, কলামে একটি লাল পদক্ষেপ নির্দেশ করে 1, তার পরে একটি হলুদ পদক্ষেপ হয়) কলামে 1, কলামে একটি লাল পদক্ষেপের পরে 2)। আপনি যতক্ষণ আপনার সমাধানটিতে উল্লেখ করেছেন ততক্ষণ আপনি 1234567 ব্যতীত অন্য কলাম নম্বরটি চয়ন করতে পারেন। আপনি যদি অন্য কিছু ফর্ম্যাটে তালিকাটি ফিরে আসতে চান; উদাহরণস্বরূপ একটি অ্যারে [2, 4, 3, 1, 1, 3]হিসাবে এটি তখনও ঠিক আছে, যতক্ষণ না মুভিগুলি কী তা সহজে দেখা যায়।

আপনি বোর্ডকে খেলোয়াড় ব্যতীত Rএবং অন্য বর্ণগুলি ব্যবহার সহ যে কোনও সংবেদনশীল বিন্যাসে পড়তে বেছে নিতে পারেন Y, তবে আপনাকে অবশ্যই নির্দিষ্ট করতে হবে কোন প্লেয়ারটি আগে যায় goes আপনি ধরে নিতে পারেন যে বোর্ডটি সর্বদা দুটি খেলোয়াড় সহ 6x7 থাকবে be

আপনি ধরে নিতে পারেন যে আপনি যে অবস্থানগুলি পেয়েছেন সেগুলি একটি স্ট্যান্ডার্ড কানেক্ট 4 বোর্ডে তৈরি করা কমপক্ষে শারীরিকভাবে সম্ভব; অর্থাত্ কোনও 'ভাসমান' টুকরো থাকবে না। আপনি ধরে নিতে পারেন যে বোর্ডটি খালি থাকবে না।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তর জেতে। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

উদাহরণ

| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | --> 1234567 (one possible answer)
| | | | | | | |
|R|Y|R|Y|R|Y|R|

| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |R| | | | | --> false
| | |Y| | | | |
|R| |Y| | | | |

| | | | | | | |
| | |Y| | | | |
| | |R| | | | |
| | |Y| | | | | --> 323333 (only possible answer)
| | |R| | | | |
| |Y|R| | | | |

| | | | | | | |
| | | | | | | |
| | | | | | | |     
| | | | | | | | --> false (this is the position arising after
| |Y|Y|Y|Y| | |     the moves 11223344, but using those moves
| |R|R|R|R| | |     the game would have ended once R made a 4)

| | | | | | | |
| | | | | | | |
|Y| | | | | | |     
|R|Y| | | | | | --> 2134231211 (among other possibilities)
|R|R|Y| | | | |
|Y|R|R|Y| | | |

| | | | | | | |
| | | | | | | |
|Y| | | | | | |     
|R|Y| | | | | | --> false (for example, 21342312117 does not
|R|R|Y| | | | |     work, because Y has already made a diagonal 4)
|Y|R|R|Y| | |R|

| | | | | | | |
| | | | | | | |
| | | | | | | |     
| | | | | | | | --> 112244553 or similar
|Y|Y| |Y|Y| | |
|R|R|R|R|R| | |

জন, কৌতূহলবশত, আপনি কি জানেন যে একটি অ-প্রাণঘাতী-শক্তি অ্যালগরিদম উপস্থিত রয়েছে?
জোনা

উত্তর:


9

জেলি , 57 বাইট

ŒṪŒ!µ0ịŒṬ¬a³ZU,Ɗ;ŒD$€Ẏṡ€4Ḅo1%15;Ḋ€ṢṚ$Ƒƙ$Ȧȧœị³$2R¤ṁ$ƑµƇṪṪ€

একটি ম্যাট্রিক্স নিয়ে যায় যেখানে 0অসম্পূর্ণ হয়, 1প্রথম 2খেলা হয় এবং দ্বিতীয় খেলে। 1-ইনডেক্সড কলামগুলির একটি তালিকা সরবরাহ করে, যদি কোনও নকল সনাক্ত হয় তবে খালি।

এটি অনলাইন চেষ্টা করুন! (এক মিনিটের মধ্যে চলতে 7 টিরও বেশি টুকরো জন্য খুব অযোগ্য)

বিঃদ্রঃ:

  1. ধরে নিন যে কোনও "ভাসমান" টুকরা উপস্থিত নেই (এটি ZṠṢ€Ƒȧ+6 বাইটের জন্য প্রিপেন্ডিং দিয়ে ঠিক করুন )
  2. ধরে নিই যে খালি বোর্ডটি নকল

11

জাভাস্ক্রিপ্ট (ES6),  202 194 187  183 বাইট

240

m=>(p=[...'5555555'],g=(c,s=o='')=>/2|4/.test(m)?['',0,2,4].some(n=>m.join``.match(`(1|3)(.{1${n}}\\1){3}`))?o:p.map((y,x)=>m[m[y][x]--^c||p[g(c^6,s+x,p[x]--),x]++,y][x]++)&&o:o=s)(2)

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

কিভাবে?

2413

এটি করার সময় এটি নিশ্চিত করে যে আমাদের এমনকি সমস্ত মানগুলি অদৃশ্য না হওয়া অবধি ধারাবাহিকভাবে চারটি বিজোড় মানের কোনও রান নেই (যেমন যদি কোনও পক্ষ জিতে যায় তবে এটি অবশ্যই শেষ পদক্ষেপ হবে)।

Y প্রতিটি কলামের জন্য পরবর্তী উপলব্ধ স্লট এক্স সঞ্চিত হয় পি[এক্স]

মন্তব্য

m => (                            // m[] = input matrix
  p = [...'5555555'],             // p[] = next row for each column
  g = (c,                         // g = recursive function taking c = color,
          s = o = '') =>          //     s = current solution, o = final output
    /2|4/.test(m) ?               // if the matrix still contains at least a 2 or a 4:
      ['', 0, 2, 4]               //   see if we have four consecutive 1's or 3's
      .some(n =>                  //   by testing the four possible directions
        m.join``                  //   on the joined matrix, using
        .match(                   //   a regular expression where the number of characters
          `(1|3)(.{1${n}}\\1){3}` //   between each occurrence is either 1, 10, 12 or 14
        )                         //   (horizontal, diagonal, vertical, anti-diagonal)
      ) ?                         //   if we have a match:
        o                         //     abort and just return the current value of o
      :                           //   else:
        p.map((y, x) =>           //     for each cell at (x, y = p[x]):
          m[                      // 
            m[y][x]--             //       decrement the value of the cell
            ^ c ||                //       compare the original value with c
            p[                    //       if they're equal:
              g(                  //         do a recursive call with:
                c ^ 6,            //           the other color
                s + x,            //           the updated solution
                p[x]--            //           the updated row for this column
              ),                  //         end of recursive call
              x                   //         then:
            ]++,                  //         restore p[x]
            y                     //         and restore m[y][x]
          ][x]++                  //         to their initial values
        ) && o                    //     end of map(); yield o
    :                             // else:
      o = s                       //   we've found a solution: copy s to o
)(2)                              // initial call to g() with c = 2

দ্রষ্টব্য আমি জিজ্ঞাসা করেছি "আমরা কি ধরে নিতে পারি যে খালি বোর্ডটি ইনপুট হিসাবে দেওয়া হবে না?" - যদি আমাদের এটি পরিচালনা করতে হয় তবে আপনার কোডটির একটি টুইঙ্ক দরকার।
জোনাথন অ্যালান

আমি জানি না কেন, f([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [0,2,2,0,2,2,0], [1,1,1,1,1,1,1] ])শেষ হওয়া উচিত 0 এবং f([ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,2,0,2,0,0], [2,2,2,0,2,2,1], [1,1,1,1,1,1,1] ])সত্য হওয়া উচিত
নাহুয়েল ফুইলুল

@ নাহুয়েলফৌইল এই প্রতিবেদন করার জন্য ধন্যবাদ। কোড সংশোধন করে আমি এই পরীক্ষার কেসগুলি যুক্ত করেছি।
21:44

2

পাইথন 2 , 295 285 বাইট

def f(a):
 if 1-any(a):return[]
 p=sum(map(len,a))%2
 for i in R(7):
	if a[i][-1:]==`p`:
	 b=a[:];b[i]=b[i][:-1];L=f(b)
	 if L>1>(`1-p`*4in','.join([J((u[j]+' '*14)[n-j]for j in R(7))for n in R(12)for u in[b,b[::-1]]]+b+map(J,zip(*[r+' '*7for r in b])))):return L+[i]
R=range;J=''.join

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

-10 thx জো রাজা

ইনপুট হ'ল কলামগুলির প্রতিনিধিত্বকারী স্ট্রিংগুলির একটি তালিকা; লাল জন্য '1' এবং হলুদ জন্য '0' সহ with স্ট্রিংগুলি '' -প্যাডড নয়। সুতরাং (মিথ্যা) কেস:

| | | | | | | |
| | | | | | | |
|Y| | | | | | |
|R|Y| | | | | |
|R|R|Y| | | | |
|Y|R|R|Y| | |R|

ইনপুট হিসাবে হয়:

[
  '0110',
  '110',
  '10',
  '0',
  '',
  '',
  '1'
]

আউটপুট হল কলাম সূচকের একটি তালিকা, 0-সূচকযুক্ত যা বোর্ড তৈরি করতে পারে; বা Noneএটি বৈধ না হলে।

খালি বোর্ডকে বৈধ হিসাবে গ্রহণ করে ( []পরিবর্তে খালি তালিকা ফেরত দেয় None)।

এই পদক্ষেপটি প্রথম পদক্ষেপের শেষ পদক্ষেপ থেকে পুনরাবৃত্ত হয়: গৃহীত মোট চলনের সংখ্যার সমতার ভিত্তিতে আমরা সর্বশেষ লাল পদক্ষেপ বা শেষ হলুদ পদক্ষেপটি সরিয়ে ফেলি (বা যদি এটি সম্ভব না হয় তবে ব্যর্থ হয়); প্রতিদ্বন্দ্বীর 4-ইন-এ-সারি রয়েছে কিনা তা ফলস্বরূপ বোর্ডটি পরীক্ষা করে দেখুন (যে ক্ষেত্রে ব্যর্থ হয়, কারণ খেলাটি ইতিমধ্যে থামানো উচিত ছিল); অন্যথায়, বোর্ড খালি না হওয়া পর্যন্ত পুনরাবৃত্তি করুন (যা বৈধ)।

4-ইন-এ-সারি কোডটি সর্বাধিক ফুলে যাওয়া অংশ। ম্যাট্রিক্সের জন্য সমস্ত তির্যক স্ট্রিং bদ্বারা উত্পাদিত হয়:

[
    ''.join(
        (u[j]+' '*14)[n-j] for j in range(7)
    )
    for u in[b,b[::-1]]for n in range(12) 
]

যা প্রথমে 'ডাউন-স্লোপিং' ত্রিভুজগুলি এবং তারপরে 'আপ-স্লোপিং'গুলি তালিকাভুক্ত করে।

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