Sheep ভেড়া ধর!


16

আপনি একজন কৃষক এবং আপনার ভেড়ার পাল পালিয়ে গেছে! ওহ না!

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

কার্য

স্থানাঙ্কের একটি তালিকা দেওয়া, ভেড়া ধারণের জন্য প্রয়োজনীয় বেড়া অংশগুলির সর্বনিম্ন পরিমাণ আউটপুট।

বিধি

  • ভেড়াগুলি ঘুরে বেড়াতে না পারলে (বেড়ার কোনও ছিদ্র নেই) থাকে।
  • আপনার বেড়াগুলির একটি ব্লকের সমস্ত ভেড়া রাখতে হবে না - একাধিক বেড়া-বিহীন অঞ্চল একে অপরের থেকে পৃথক থাকতে পারে।
  • বেড়া বিভাগগুলি মূল দিকগুলিতে ভিত্তি করে।
  • প্রতিটি সমন্বিত টুপল একটি একক ভেড়া উপস্থাপন করে।
  • ইনপুট অবশ্যই ইতিবাচক পূর্ণসংখ্যক জোড় থাকতে হবে, x>0এবং y>0, তবে আপনার ভাষার জন্য উপযুক্তভাবে ফর্ম্যাট করা যেতে পারে।
    • যেমন: {{1,1},{2,1},{3,7}, .. }বা[1,2],[2,1],[3,7], ..
  • বেড়া-বন্ধ জায়গার ভিতরে খালি জায়গা ঠিক আছে।
  • আপনি স্থানাঙ্কগুলি কোনও নির্দিষ্ট ক্রমে ইনপুট বলে ধরে নিতে পারবেন না।

উদাহরণস্বরূপ, একটি একক ভেড়া 4সম্পূর্ণরূপে বেড়া বিভাগে থাকা প্রয়োজন।

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

[1,1]
4

[1,1],[1,2],[2,2]
8

[2,1],[3,1],[2,3],[1,1],[1,3],[3,2],[1,2],[3,3]
12

[1,1],[1,2],[2,2],[3,7],[4,9],[4,10],[4,11],[5,10]
22

[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]
36

[1,1],[2,2],[3,3],[4,4],[6,6],[7,7],[8,8],[9,9]
32

[2,1],[8,3],[8,4]
10

মন্তব্য

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

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর!


ইনপুটটি কি x স্থানাঙ্কের একটি তালিকা হতে পারে, তার পরে y স্থানাঙ্কের একটি তালিকা হতে পারে? যেমন{1,2,3,4},{5,6,7,8} -> {1,5},{2,6},{3,7},{4,8}
পাভেল

@ ফিনিক্স না, প্রতিটি x,yইনপুট অবশ্যই একসাথে থাকতে হবে। খুব ভাল লাগলো যদিও, আমি নিজেই তা ভেবে দেখিনি।
জারম্যাট

স্থানাঙ্কের সীমা কি? 0 এবং নেতিবাচক কি সম্ভব?
এগ্রিড

3
এটি আশ্চর্যজনকভাবে কঠিন। যতবারই আমি মনে করি আমার কাছে একটি হিউরিস্টিক রয়েছে যা সমস্ত ক্ষেত্রে পরিচালনা করে, সেখানে আমার কিছু মিস হয়ে যায়।
xnor

1
বাহ, কি চ্যালেঞ্জ। আমি আমার ক্ষতি স্বীকার করি; স্ক্রু 05AB1E এ করছেন।
ম্যাজিক অক্টোপাস উরন

উত্তর:


5

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

a=>Math.min(...(P=(a,r=[[a]],c=a[0])=>(a[1]&&P(a.slice(1)).map(l=>(r.push([[c],...l]),l.map((_,i)=>r.push([[c,...l[i]],...((b=[...l]).splice(i,1),b)])))),r))(a).map(L=>L.reduce((p,l)=>l.map(([h,v])=>(x=h<x?h:x,X=h<X?X:h,y=v<y?v:y,Y=v<Y?Y:v),x=y=1/0,X=Y=0)&&p+X-x+Y-y+2,0)))*2

কিভাবে?

ইনপুট তালিকার সমস্ত সম্ভাব্য পার্টিশনের একটি তালিকা তৈরি করতে আমরা পুনরাবৃত্ত ফাংশন পি () ব্যবহার করি । এই ফাংশনটি বর্তমানে সাব-অনুকূল, এটি কিছু নকল পার্টিশন ফিরিয়ে দিচ্ছে - যা চূড়ান্ত ফলাফলকে পরিবর্তন করে না।

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

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


দ্বিতীয় ধাপ সম্পর্কে, কেন না [ [1,1],[2,2] ] , [ [1,2] ]?
edc65

@ edc65 আশা করি এটি এখন ঠিক করা উচিত।
আর্নল্ড

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