পটভূমি
নেকলেস বিভাজন সমস্যা (বা তিনি যেমন ডাকেন, চুরি করা নেকলেস সমস্যা) এবং বোরসুক-উলামের উপপাদ্যের সাথে এর সম্পর্ক সম্পর্কে আমি 3 ব্লু 1 ব্রাউনের সাম্প্রতিক ভিডিও থেকে অনুপ্রাণিত হয়েছি ।
এই সমস্যায়, দুই চোর বিভিন্ন ধরণের রত্ন সমন্বিত একটি মূল্যবান নেকলেস চুরি করেছে। রত্নের প্রতিটি ধরণের একটি এমনকি সংখ্যক রয়েছে এবং চোরেরা তাদের মধ্যে দুটি রত্নের মধ্যে সমানভাবে ভাগ করতে চায়। ক্যাচটি হ'ল তারা অবশ্যই নেকলেসকে কয়েকটি সংখ্যক সংক্ষিপ্ত অংশে বিভক্ত করে তাদের উভয়টির মধ্যে বিভাগগুলি বিতরণ করার মাধ্যমে তা করতে হবে।
এখানে চার মণি ধরনের প্রকাশ সঙ্গে একটি উদাহরণ S
, E
, D
, এবং R
(নীলকান্তমণি, পান্না, হীরা, এবং রুবি যথাক্রমে জন্য)। বলি যে নেকলেসটি নীচে রয়েছে:
[S,S,S,E,S,D,E,R,S,R,E,S,S,S,D,R,E,E,R,E,D,E,R,R,D,E,E,E]
আছে 8
নীলকান্তমণি, 10
পান্না, 4
হীরা, এবং 6
অমূল্য। আমরা নীচে নেকলেস বিভক্ত করতে পারেন:
[[S],[S],[S,E,S,D,E,R,S],[R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]]
তারপরে আমরা যদি প্রথম, তৃতীয় এবং পঞ্চম বিভাগকে একজন চোরকে এবং দ্বিতীয় এবং চতুর্থ অংশটি অন্য চোরকে দিয়ে থাকি তবে প্রত্যেকে 4
নীলা, 5
পান্না, 2
হিরে এবং 3
রুবি দিয়ে শেষ হবে :
[S], [S,E,S,D,E,R,S], [R,R,D,E,E,E]
[S], [R,E,S,S,S,D,R,E,E,R,E,D,E],
0
সূচকগুলি ব্যবহার করে , সূচকগুলিতে এই কাটাগুলি ঘটে [1,2,9,22]
।
লক্ষ্য
দেখা যাচ্ছে যে এ জাতীয় ন্যায্য বিভাগ সর্বদা বেশিরভাগ n
কাটা ব্যবহার করে করা যেতে পারে , যেখানে n
রত্ন প্রকারের সংখ্যা। আপনার কাজটি হ'ল একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট হিসাবে একটি নেকলেস নেয় এবং একটি ন্যূনতম এ জাতীয় বিভাগকে ছাড় দেয় (সংখ্যায় খুব কম সংখ্যক)।
ইনপুট
ইনপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে। নেকলেসটি রত্নগুলির ক্রম হওয়া উচিত এবং আরও কিছু নয়; উদাহরণস্বরূপ, পূর্ণসংখ্যার একটি তালিকা, রত্নের প্রকার এবং মান সূচকের তালিকা হিসাবে মানগুলি উপস্থাপন করে এমন কীগুলি সহ অভিধান। আপনি বিকল্প হিসাবে নেকলেসের দৈর্ঘ্য বা স্বতন্ত্র রত্ন প্রকারের সংখ্যা অন্তর্ভুক্ত করতে পারেন তবে আপনার অন্য কোনও ইনপুট নেওয়া উচিত নয়।
আপনি ধরে নিতে পারেন ইনপুট নেকলেসটি বৈধ। যেখানে কোনও প্রদত্ত প্রকারের অদ্ভুত অলঙ্কার রয়েছে বা নেকলেস খালি রয়েছে সেই ক্ষেত্রে আপনার কেসটি পরিচালনা করার দরকার নেই।
আউটপুট
আবার, আউটপুট যে কোনও সুবিধাজনক বিন্যাসে হতে পারে; উদাহরণস্বরূপ বিভাগগুলির তালিকা, কাটা পজিশনের একটি তালিকা, দুই চোরের প্রতিনিধিত্বকারী কীগুলির একটি অভিধান এবং বিভাগগুলির তালিকা হিসাবে মূল্যগুলি ইত্যাদি values বিভাগগুলি তাদের সূচক, সমাপ্ত সূচক, ধারাবাহিক সূচকের তালিকা, রত্নগুলির তালিকা, দ্বারা উপস্থাপিত হতে পারে তাদের দৈর্ঘ্য ইত্যাদি আপনি ব্যবহার করতে পারেন 0
- বা 1
- সূচক use যদি অর্ডারিংটি আপনার ফর্ম্যাটটির পক্ষে তাৎপর্যপূর্ণ না হয়, তবে আপনার আউটপুট কোনও ক্রমে হতে পারে। বেশ কয়েকটি বিভিন্ন ফর্ম্যাটে উপরের আউটপুটটি এখানে:
list of segments: [[S],[S],[S,E,S,D,E,R,S],[R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]]
list of cuts: [1,2,9,22]
list of lengths: [1,1,7,13,6]
dictionary: {'thief1' : [(R,R,D,E,E,E),(S),(S,E,S,D,E,R,S)], 'thief2' : [(S),(R,E,S,S,S,D,R,E,E,R,E,D,E)]}
দ্রষ্টব্য যে বিভাগগুলি (চোরদের মধ্যে বিকল্প বিভাগগুলি) এবং দৈর্ঘ্যের তালিকায় (বিভাগগুলি চিহ্নিত করার জন্য) গুরুত্বপূর্ণ, তবে কাট বা অভিধানের তালিকায় নয় order সম্পাদনা করুন: গ্রেগ মার্টিন উল্লেখ করেছেন যে এগুলি বৈধ আউটপুট হবে না যেহেতু দুটি কাটতে ন্যায্য বিভাগ পাওয়া যায়
পরীক্ষার মামলা
[1,2,1,2,1,3,1,3,3,2,2,3] -> [[1,2,1],[2,1,3,1],[3,3,2],[2,3]]
[1,1,1,1,2,2,3,3,3,3,3,3] -> [[1,1],[1,1,2],[2,3,3,3],[3,3,3]]
[1,1,1,1,1,1,1,1,1,1,1,1] -> [[1,1,1,1,1,1],[1,1,1,1,1,1]]
[1,1,1,1,2,3,4,2,3,4,2,2] -> [[1,1],[1,1,2,3,4,2],[3,4,2,2]]
মন্তব্য
- স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
- এটি কোড-গল্ফ ; সংক্ষিপ্ত উত্তর (বাইটে) জেতা
[S,S,S,E,S,D,E,R,S,R,E,S,S,S,D,R,E,E,R,E,D,E,R,R,D,E,E,E]
, মনে হচ্ছে আউটপুটটি হওয়া উচিত [[S,S,S,E,S,D,E,R],[S,R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]]
, যেহেতু এর চেয়ে কম কাট রয়েছে [[S],[S],[S,E,S,D,E,R,S],[R,E,S,S,S,D,R,E,E,R,E,D,E],[R,R,D,E,E,E]]
। আমি কি অনুমানটি সঠিকভাবে বুঝতে পারি?