ননারি গেমটি কে পালাতে পারে?


13

ননারি গেমটি একই নামের ভিডিও গেম ট্রিলজিতে খেলা একটি কাল্পনিক গেম। আপনার লক্ষ্য হ'ল সংখ্যার কম বাইটে কোডের কতটা খেলোয়াড় (সেরা) একটি প্রদত্ত খেলা থেকে পালাতে পারে।

খেলার নিয়ম

  • 9 জন খেলোয়াড় রয়েছেন, 1 থেকে 9 সংখ্যাযুক্ত।
  • সমস্ত খেলোয়াড় একই ঘরে শুরু হয়।
  • এখানে 1 থেকে 9 নম্বর সহ প্রতিটি দরজা রয়েছে। ডুপ্লিকেট বা অনুপস্থিত দরজা নম্বর থাকতে পারে।
  • দরজা কক্ষগুলির মধ্যে একমুখী সংযোগ। প্রতিটি দরজা কেবল একবার ব্যবহার করা যেতে পারে
  • কেবলমাত্র 3 থেকে 5 খেলোয়াড়ের একটি দল একটি দরজা দিয়ে যেতে পারে।
  • একটি গোষ্ঠী কেবলমাত্র একটি দরজা দিয়ে যেতে পারে যদি তাদের 9 টি সংখ্যার যোগুলটি 9 টির সাথে দরজার নম্বর মডিউল 9 টির সাথে মেলে।
  • 9 দরজার মধ্য দিয়ে যে কোনও খেলোয়াড় পালিয়ে যায় (জিত))

উদাহরণ

┌───┬───┬───┐
│   6   4   9
│ < │   |   |
│   3   5   9
└───┴───┴───┘ 

<প্রারম্ভিক পয়েন্ট উপস্থাপন করে। সমস্ত খেলোয়াড় সেখানে শুরু।

এই সেটিংয়ে, সবাই পালাতে পারে। এটি অর্জনের বিভিন্ন উপায় রয়েছে যার মধ্যে একটি হ'ল:

  • [1, 2, 3, 4, 5] দরজা 6 (যদিও (1 + 2 + 3 + 4 + 5)% 9 = 6) যেতে হবে, [[6, 7, 8, 9] দরজা 3 দিয়ে যান (6 + 7 + 8 + 9)% 9 = 3)। সকলেই দ্বিতীয় ঘরে মিলিত হয়।
  • [1, 2, 3, 7] 4 দরজা দিয়ে যান [4, 5, 6, 8, 9] দরজা 5 দিয়ে যান।
  • [1, 2, 3, 4, 8] 9 টি দরজার একটির মধ্য দিয়ে যান [5, 6, 7, 9] অন্য একটি দিয়ে যান।
┌───┬───┐
│   │   |
│ < 8   9
│   │   |
└───┴───┘ 

এবার, সর্বাধিক 4 জন ব্যক্তি পালাতে পারবেন:

  • [1, 3, 5, 8, 9] 8 দরজা দিয়ে যান।
  • [1, 3, 5, 9] 9 দরজা দিয়ে যান।

বেঁচে থাকা অন্যান্য তালিকাগুলি যেমন [2, 3, 4] বা [1, 4, 6, 7] সম্ভব, তবে 4 জনেরও বেশি লোকের পালানোর উপায় নেই।

চ্যালেঞ্জ

একটি মানচিত্র দেওয়া হয়েছে, সর্বাধিক সংখ্যক খেলোয়াড় পালাতে পারবেন output

  • চিন্তা করবেন না, আপনার আমার ভয়ঙ্কর চিত্রগুলি পার্স করার দরকার নেই! ইনপুট একটি লেবেলযুক্ত নির্দেশিত গ্রাফ, যা আপনি যে কোনও সুবিধাজনক বিন্যাসে উপস্থাপন করতে পারেন (প্রান্ত সেট, সংলগ্ন ম্যাট্রিক্স ...)।
  • যদি আপনার প্রতিনিধিত্বের জন্য কক্ষগুলির জন্য লেবেল প্রয়োজন হয় তবে আপনি মানগুলির যে কোনও সামঞ্জস্যপূর্ণ সেট ব্যবহার করতে পারেন। যাইহোক, দরজাগুলি 1 থেকে 9 এর পূর্ণসংখ্যার দ্বারা প্রতিনিধিত্ব করতে হবে।
  • ইনপুটটিতে সর্বদা কমপক্ষে একটি 9 টি দরজা থাকবে। সমস্ত 9 টি দরজা সর্বদা প্রস্থান করার দিকে পরিচালিত করে, অন্য দরজা কখনও তা করে না।
  • আপনার জমা কোনও ফাংশন বা সম্পূর্ণ প্রোগ্রাম হতে পারে।
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে।

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

ইনপুটগুলি [দরজা নম্বর থেকে, ঘর থেকে ঘরে] ট্রিপলিটের তালিকা হিসাবে দেখানো হয়েছে, 0 টি শুরুর ঘর এবং -1 প্রস্থান হিসাবে রয়েছে। আপনি যদি অন্য কোনও ফর্ম্যাট ব্যবহার করতে চান তবে আপনাকে সেগুলি যথাযথ রূপান্তর করতে হবে।

Input                                                                      Output
[[6, 0, 1], [3, 0, 1], [4, 1, 2], [5, 1, 2], [9, 2, -1], [9, 2, -1]]       9
[[8, 0, 1], [9, 1, -1]]                                                    4
[[9, 0, -1]]                                                               5
[[2, 0, 1], [1, 1, 2], [9, 2, -1]]                                         0
[[2, 0, 1], [3, 1, 2], [9, 2, -1]]                                         3
[[1, 0, 1], [9, 1, -1], [1, 0, 2], [9, 2, -1]]                             4
[[2, 0, 1], [3, 0, 1], [5, 1, 2], [4, 0, 2], [9, 2, -1], [9, 2, -1]]       8
[[3, 0, 1], [4, 0, 1], [5, 0, 1], [9, 1, -1], [7, 1, 2], [9, 2, -1]]       7
[[1, 0, 1], [2, 0, 1], [4, 0, 1], [9, 1, -1], [8, 1, 2], [9, 2, -1]]       6
[[6, 0, 1], [7, 0, 1], [9, 1, -1], [9, 1, -1]]                             7

4
আমি জানি এটি গেমটির প্রতিলিপি 999 হচ্ছে তবে এটি আমাকে বাগ দেয় যে আপনাকে 9 নম্বর দিয়ে দরজা নম্বরটি পরিবর্তন করতে হবে কারণ তারা ডোর 0 দিয়ে পালাতে চান না
ভেস্কাহ

বর্ণনা এবং চিত্রের উদাহরণগুলিতে এটি আরও পরিষ্কার করার উপযুক্ত হতে পারে যে কয়েকটি দরজা কক্ষগুলি বাইপাস করে। এছাড়াও কি দরজা কখনও পিছনে যেতে পারে? উদাহরণস্বরূপ কিছু লোক 0-> 1-> প্রস্থান করতে পারেন এবং অন্যরা 0-> 2-> 1-> প্রস্থান করতে পারেন?
নিক কেনেডি

@ নিক কেনেডি নিশ্চিত নয় যে আপনি "বাইপাস" বলতে কী বোঝাতে চাইছেন। দরজা যে কোনও ঘরকে অন্য কোনও ঘরে সংযুক্ত করতে পারে। এটি একটি নির্দেশিত গ্রাফ।
গ্রিমি

আপনি যদি মনে করেন যে এই সিরিজের নিয়মগুলি যে কেউ ভুল করার সাথে সাথে স্বতঃস্ফূর্ত বিস্ফোরণের হুমকির সাথে আরও আকর্ষণীয় করা যেতে পারে, দয়া করে গেমটি একবার চেষ্টা করে দেখুন। এটা দুর্দান্ত।
ছড়িয়ে ছিটিয়ে

@ গ্রিমি নিশ্চিত, তবে চিত্রের উদাহরণ এবং প্রথম 5 টি আসল উদাহরণগুলির মধ্যে একটি ঘর থেকে ডানদিকে পরের দিকে যাওয়ার সমস্ত দরজা রয়েছে।
নিক কেনেডি

উত্তর:


7

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

স্ট্রিংয়ের পরিবর্তে বিটমাস্ক ব্যবহার করে একটি ধীর অথচ উল্লেখযোগ্যভাবে সংক্ষিপ্ত সংস্করণ।

f=(D,P=[511],e=m=0)=>P.map((X,r)=>[...Array(-~X)].map((_,p)=>D.map(([d,s,t],j)=>(N=(g=(n,k)=>n&&n%2+g(n>>1,++k,x+=n%2*k))(p&=X,x=0))<3|N>5|r-s|x%9^d%9||f(D.filter(_=>j--),A=[...P],e+!~t*N,A[r]^=p,A[t]^=p))),m=m>e?m:e)|m

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

নোট: এটি ধীর হওয়ার কারণ হ'ল আমরা খেলোয়াড়দের পাওয়ারশিটগুলি গণনা করি না। প্লেয়ার্সের বিটমাস্ক দেওয়া , আমরা সকলকে ছাড়াই জন্য পুনরাবৃত্তি করি ।X(XANDp)0pX


জাভাস্ক্রিপ্ট (ES7),  293 272  271 বাইট

চ্যালেঞ্জ বর্ণিত বিন্যাসে ইনপুট নেয়। এটি একটি নিষ্ঠুর শক্তি অনুসন্ধান।

f=(D,P=[17**6+'8'],e=m=0)=>P.map((X,r)=>X&&[...X].reduce((a,x)=>[...a,...a.map(y=>y+x)],['']).map(p=>D.map(([d,s,t],j)=>p<99|p[5]|r-s|eval([...p].join`+`)%9^d%9||f(D.filter(_=>j--),A=[...P],e+!~t*p.length,A[r]=X.replace(eval(`/[${p}]/g`),''),A[t]=[A[t]]+p))),m=m>e?m:e)|m

এটি অনলাইন চেষ্টা করুন! (টিআইওতে প্রথম পরীক্ষার কেস শেষ হয়েছে)

কিভাবে?

অ্যারে P[]প্রতিটি ঘরের খেলোয়াড়দের বর্ণনা করে স্ট্রিংয়ের একটি তালিকা রয়েছে।

আমরা শুরু করি P=['241375698']( ব্যবহার করে ) যার অর্থ হল যে সমস্ত খেলোয়াড় প্রাথমিকভাবে রুম অবস্থিত ।176=241375690

Xঅবস্থানের প্রতিটি কক্ষের জন্য r, আমরা এর পাওয়ারশিট গণনা করি X:

[...X].reduce((a, x) => [...a, ...a.map(y => y + x)], [''])

pসেখানে থাকা প্রতিটি খেলোয়াড়ের জন্য এবং [d,s,t]সূচকের প্রতিটি দরজার জন্য j, আমরা পরীক্ষা করে দেখি যে গ্রুপটি দরজা দিয়ে যেতে পারছে না:

                         // we can't pass if:
p < 99 |                 // there are less than 3 players
p[5] |                   // or there are more than 5 players
r - s |                  // or the source room s is not equal to the current room
eval([...p].join`+`) % 9 // or the sum of the players modulo 9
^ d % 9                  // does not match the ID of the door modulo 9

গ্রুপটি যদি পাস করতে পারে তবে আমরা একটি পুনরাবৃত্ত কল করব:

f(                       //
  D.filter(_ => j--),    // remove the door that has just been used from D[]
  A = [...P],            // use a copy A[] of P[]
  e + !~t * p.length,    // if t = -1, add the length of p to e (number of escaped guys)
  A[r] = X.replace(      // remove the players from the source room A[r]
    eval(`/[${p}]/g`),   //
    ''                   //
  ),                     //
  A[t] = [A[t]] + p      // and append them to the target room A[t]
)                        //

আমরা পালিয়ে যাওয়া সর্বাধিক সংখ্যক খেলোয়াড়ের খোঁজ রাখি mএবং শেষ পর্যন্ত এটি ফিরিয়ে আনি।


আপনি কি সব সম্ভাবনার চেষ্টা করছেন?
জোনা

1
@ জোনাঃ হ্যাঁ এটি ইনপুট দ্বারা আরোপিত বাধাগুলির উপর নির্ভর করে খুব দ্রুত বা খুব ধীর হতে পারে।
আর্নল্ড

2

জেলি , 76 বাইট

2ịịœc3r5¤ẎS,%9EʋƇ1ị${ḟ@;ƭⱮ€Ḋị¥ż€Ḋ{ṛṪ}¦ƒ€
ç@€Ẏ;ḷṢ€€Q
“”WẋḊ€FṀƊ9RW¤;Wçƒ@⁸ẈṪ$€Ṁ

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

একক আর্গুমেন্ট গ্রহণের জন্য একটি সম্পূর্ণ প্রোগ্রাম, 1, 2, ... এবং 0 টি কক্ষগুলি প্রস্থান হিসাবে ব্যবহার করে একটি নির্দেশিত গ্রাফ। একটি পূর্ণসংখ্যা প্রদান করে যা সর্বাধিক সংখ্যাটি পালাতে পারে। অনুসরণ করতে সম্পূর্ণ ব্যাখ্যা।

Ṣ€€Q4-বাইট সঞ্চয় না করে চালানো উচিত তবে আস্তে আস্তে।

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