গোপন সান্তা - পুনর্বিবেচিত


11

ক্রিসমাস দ্রুত এগিয়ে আসছে এবং এর সাথে, বার্ষিক পরিবার গোপন সান্তা সাজিয়ে তুলছে। আমি চেষ্টা করে দেখতে চাই এবং এটি শুরু করতে চাই তবে দম্পতিরা একে অপরের জন্য ক্রয় না করার কারণে সমস্যা সৃষ্টি হয় এবং বছরের পর বছর ধরে এই সমস্যা সত্ত্বেও Bobবেশিরভাগ উপহারের জন্য উপহার কেনার ক্ষেত্রে বেশ সমস্যা আছে , Erinহতাশ হবেন সম্ভবত, তবে তিনি জানেন যে Frankটালিসকারকে পছন্দ করে, তাই তিনি তাঁর পক্ষে একটি দুর্দান্ত ম্যাচ। এটি আমার প্রয়োজনগুলির জন্য বিদ্যমান সহজ সমাধানগুলির কোনওটিকেই গ্রহণযোগ্য করে তোলে না।

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

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

আপনি ধরে নিতে পারেন যে আপনাকে কখনই সদৃশ নাম সহ উপস্থাপন করা হবে না কারণ আমাদের পরিবারের কোন সদস্যটি তা জানাতে সক্ষম হতে হবে তবে আপনাকে এমন ডেটা সহ উপস্থাপন করা যেতে পারে যাতে আলাদা করার জন্য স্পেস রয়েছে Bob Senior থেকে Bob Junior! এটি উত্সাহিত বড় পরিবারগুলির জন্য সরবরাহিত সমস্ত পরীক্ষার ক্ষেত্রে এক ঘন্টার মধ্যে সম্পূর্ণ করা উচিত, যেমন উত্সের ডেটাতে 100 টি অনন্য নাম (দয়া করে নীচের উদাহরণস্বরূপ ডেটা সেটগুলি দেখুন, আপনাকে অবশ্যই বরাদ্দ সময়ের মধ্যে এই সমস্তগুলি বিশ্লেষণ করতে সক্ষম হতে হবে)।

উদাহরণ ইনপুট:

santa([
    ["Alice", 0, 0, 1, 1, 1, 1, 1],
    ["Bob",   0, 0, 0, 0, 0, 1, 0],
    ["Carla", 1, 1, 0, 0, 0, 1, 1],
    ["Dan",   1, 1, 0, 0, 0, 1, 1],
    ["Erin",  1, 1, 0, 0, 0, 1, 1],
    ["Frank", 1, 1, 1, 1, 1, 0, 1],
    ["Gary",  1, 1, 1, 1, 1, 1, 0]
]);
// might return something like:
[
    ["Alice", "Erin"],
    ["Bob", "Frank"],
    ["Carla", "Alice"],
    ["Dan", "Gary"],
    ["Erin", "Bob"],
    ["Frank", "Dan"],
    ["Gary", "Carla"]
]
santa([
    ["Alice", 0, 1, 1, 1, 0, 1],
    ["Bob",   0, 0, 1, 1, 0, 1],
    ["Carla", 0, 1, 0, 1, 0, 1],
    ["Dan",   0, 1, 1, 0, 0, 0],
    ["Erin",  0, 0, 1, 0, 0, 1],
    ["Frank", 1, 1, 1, 1, 1, 0]
]);
false
santa([
    ["Alice", 0, 1, 1],
    ["Bob",   1, 0, 1],
    ["Carla", 1, 1, 0]
]);
[
    ["Alice", "Bob"],
    ["Bob", "Carla"],
    ["Carla", "Alice"]
]

ভাষার উপর নির্ভর করে, ইনপুটটি অন্য ফর্ম্যাটে STDIN হতে পারে , উদাহরণস্বরূপ বিশদটি সরবরাহ করা যেতে পারে:

script <<< 'Alice,0,0,1,1,1,1,1
Bob,0,0,0,0,0,1,0
Carla,1,1,0,0,0,1,1
Dan,1,1,0,0,0,1,1
Erin,1,1,0,0,0,1,1
Frank,1,1,1,1,1,0,1
Gary,1,1,1,1,1,1,0'

আউটপুট যে কোনও সংবেদনশীল বিন্যাসে সরবরাহ করা যেতে পারে, আপনার ভাষার পক্ষে যেটি সহজ। গ্রহণযোগ্য ফর্ম্যাটগুলির মধ্যে অ্যারেগুলির একটি অ্যারে (উপরে হিসাবে) বা সম্ভবত একটি হ্যাশ / Object/ এসোসিয়েটিভ অ্যারে বা এমনকি কেবল পার্সিংগুলি মুদ্রণ করা রয়েছে STDOUT:

Alice:Dan
Bob:Erin
Carla:Bob
Dan:Alice
Erin:Frank
Frank:Carla

যদি সন্দেহ হয় তবে দয়া করে আপনার উত্তর সহ প্রয়োজনীয় ইনপুট ফর্ম্যাট এবং প্রত্যাশিত আউটপুট ফর্ম্যাট এর উদাহরণ জিজ্ঞাসা করুন এবং সরবরাহ করুন।

জাভাস্ক্রিপ্ট বাস্তবায়ন রেফারেন্স

আরও বড় ডেটা সেট: 100 , 100 , 200 , 200 - অনেকগুলি সমাধান , 200 - শুধুমাত্র এক সমাধান

রেফারেন্স বাস্তবায়ন আমার মেশিনে <4 এস এ সমস্ত সম্পূর্ণ করে।

এই স্ক্রিপ্ট দিয়ে উত্পন্ন সেট উপরে ।


1
আমরা কি ধরে নিতে পারি যে সাবারিগুলির উপাদানগুলি প্যারেন্ট অ্যারেরগুলির মতো একই ক্রমে রয়েছে? এবং যে 1kth subarray এর (n + 1) তম উপাদানটির অর্থ kth ব্যক্তি nth ব্যক্তিকে দিতে পারে?
msh210

@ এমএস 210 আসলে, ভার্জোজ না হওয়ার জন্য ক্ষমাপ্রার্থী, আমি নিশ্চিত করতে প্রশ্নটি আপডেট করব।
ডম হেস্টিংস

প্রথম উদাহরণে এটি কোথা থেকে ম্যাপিং সরবরাহ Bobকরে Erin? আমি শুধু থেকে এক দেখতে Erinকরতে Bob
LegionMammal978

@ লিজিওনম্যামাল ৯78৮ আহ্, এটি একটি দুর্দান্ত প্রশ্ন এবং এর উত্তর কেবল একটি সম্পাদনা দ্বারা দেওয়া যেতে পারে ... দুঃখিত! সংশোধন করা হয়েছে!
ডোম হেস্টিংস

1
N0! এটা বড়দিনের প্রথম দিকে উপায়! এটি গোপন তুরস্ক হওয়া উচিত যারা উপহার দেয়।
গ্রান্ট ডেভিস

উত্তর:


4

জাভাস্ক্রিপ্ট ES6, 191

এই সমাধানটি জোড়ার তালিকার তালিকা হিসাবে সমস্ত সম্ভাব্য জুটিগুলি ফেরত দেয়:

f=l=>(h=l=>l.length,n=l.map(i=>i.shift()),o=[],(r=s=>(g=h(s))<h(n)?l[g].map((e,x)=>e&&r([...s,x])):o.push([...s]))([]),o.filter(i=>h([...new Set(i)])==h(n)).map(l=>l.map((t,f)=>[n[f],n[t]])))

উদাহরণ রান:

>> example = f([
    ["Alice", 0, 0, 1, 1, 1, 1, 1],
    ["Bob",   0, 0, 0, 0, 0, 1, 0],
    ["Carla", 1, 1, 0, 0, 0, 1, 1],
    ["Dan",   1, 1, 0, 0, 0, 1, 1],
    ["Erin",  1, 1, 0, 0, 0, 1, 1],
    ["Frank", 1, 1, 1, 1, 1, 0, 1],
    ["Gary",  1, 1, 1, 1, 1, 1, 0]])

<< Array [ Array[7], Array[7], Array[7], Array[7], Array[7], Array[7], Array[7], Array[7], Array[7], Array[7], 26 more… ]

>> example[0]

<< Array [ "Alice:Carla", "Bob:Frank", "Carla:Alice", "Dan:Bob", "Erin:Gary", "Frank:Dan", "Gary:Erin" ]

আমি মনে করি যে বৃহত্তর পরীক্ষার কেসগুলির উপর ভিত্তি করে এটি ব্যর্থ হবে কারণ এটি সমস্ত অনুমোদন জেনারেট করে ... আপনি কি আপনার মেশিনের বৃহত্তর সেটগুলির জন্য এটি শেষ করে তা বৈধ করতে পারবেন? ধন্যবাদ! দুঃখিত যে এই বৃহত্তর সেটগুলি প্রথমে সেখানে ছিল না।
ডম হেস্টিংস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.