একটি মাইনসুইপার বোর্ডের 3 বিভি গণনা করুন


17

3BV একটি এর শত্রু কর্তৃক স্থাপিত মাইন সরইয়া ফেলিবার কাজে নিযুক্ত জাহাজ বোর্ড বোর্ড সমাধানের জন্য যদি আপনি ইতিমধ্যে সমাধান জানেন প্রয়োজনীয় বাম ক্লিকের সর্বনিম্ন সংখ্যা প্রতিনিধিত্ব করে। এটি "বেচটেলের বোর্ড বেঞ্চমার্ক মান" এর জন্য দাঁড়িয়েছে। এখানে তার সাইট এটি ব্যাখ্যা করছে।

নীচে একটি সমাধান করা মাইনসুইপার বোর্ড রয়েছে। পতাকাগুলি খনিগুলি নির্দেশ করে; খনি ছাড়াই টাইলগুলি ত্রিভুজ সহ সংলগ্ন খনিগুলির গণনা নির্দেশ করে, "0" থাকা টাইলগুলির পরিবর্তে ফাঁকা রাখা উচিত। চিত্রটি দেখায় যে বোর্ডটি সমাধান করার জন্য কোন টাইলগুলি ক্লিক করা দরকার।

3 বিভি গণনা হচ্ছে

3 বিভি-র দিকে গণনা করা ক্লিকগুলি হ'ল:

  • ফাঁকা টাইলস (শূন্য খনি সংলগ্ন) এবং তাদের খালি খালি প্রতিবেশীদের প্রতিটি বন্যায় ভরা অঞ্চলের জন্য একটি।
  • একে অপরের জন্য নন-মাইন টাইল।

অন্য উদাহরণ (3 বিভি = 39)

সলভিত মাইনসুইপার বোর্ড ক্লিকগুলি প্রয়োজন


2D অ্যারের মানগুলি দেওয়া হয়েছে, 0পরিষ্কার করার জন্য এবং 1একটি খনি (বা বুলিয়ান) এর জন্য, 3BV ফেরত দিন

একটি বোর্ডের মাত্রা কমপক্ষে 8x8 এবং অন্তত 24x30 অন্তর্ভুক্ত হবে be আপনার প্রোগ্রামটি কেবলমাত্র উদাহরণগুলি নয়, সমস্ত সম্ভাব্য বোর্ড পরিচালনা করবে।

দ্রষ্টব্য: একটি বোর্ডে কেবলমাত্র খনি থাকে না।

আই / ও উদাহরণ:

[[0,0,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,1,0],
[0,1,0,0,1,0,0,0],
[0,0,1,0,0,0,0,1],
[0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,1,0],
[0,0,0,0,0,0,0,1]]

23

[[0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0],
[0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0],
[0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0],
[1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0],
[0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0],
[0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],
[0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0],
[0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0]]

187

পূর্ণসংখ্যার একটি অ্যারে কি ইনপুট হিসাবে ঠিক আছে? প্রতিটি পূর্ণসংখ্যা এক সারি কোড করে।
কার্ল ন্যাপফ

@ কার্লনাপফ নং। ইনপুটটি দেখানো হিসাবে একটি বোর্ড হিসাবে স্বীকৃত হওয়া উচিত।
mbomb007

আপনি সম্ভবত প্রদর্শিত চিত্রগুলির উপর ভিত্তি করে ইনপুট এবং সম্ভবত একটি সর্বোচ্চ মাত্রিক পরীক্ষার কেস সহ আরও পরীক্ষার কেস সরবরাহ করতে পারেন?
মাইল

উত্তর:


15

ম্যাটল্যাব, 92 90 86 83 79 74 72 বাইট

x=input('');I=@(x)~imdilate(x,ones(3));[C,N]=bwlabel(I(x));nnz(I(C)-x)+N

এই সমাধানটি 0 এবং 1 এর 2D ম্যাট্রিক্স আকারে ইনপুট গ্রহণ করে এবং সরবরাহিত ইনপুটটির জন্য 3BV মান প্রদর্শন করবে।

ম্যাটব্লব ছাড়াই আপনারা যাদের জন্য অক্টোবায় কিছুটা সংশোধিত ডেমো রয়েছে।

ব্যাখ্যা

ইনপুট ম্যাট্রিক্সটি 3 x 3 ম্যাট্রিক্স এর 1's' এর সাহায্যে বিভক্ত করা হয় এবং তারপরে উল্টানো (ব্যবহার করা ~) যা প্রতিবেশী ( 1) বা কর ( 0) হিসাবে খনি না থাকা সমস্ত পয়েন্টকে চিহ্নিত করে । সংযুক্ত অঞ্চলের সংখ্যা নির্ধারণ করতে, আমরা bwlabelপ্রতিটি সংযুক্ত অঞ্চলের লেবেল ব্যবহার করি 1। প্রথম আউটপুটটি হ'ল লেবেল ম্যাট্রিক্স ( 0যেখানে ইনপুটটি শূন্য ছিল এবং যেখানে ইনপুটটিতে কোনও মান 1...Nছিল 1যেখানে Nএটি সংযুক্ত গ্রুপের সূচক তা অন্তর্ভুক্ত)। দ্বিতীয় আউটপুটটি হ'ল অঞ্চলগুলির সংখ্যা (তাদের খোলার জন্য প্রয়োজনীয় ক্লিকের সংখ্যা)। bwlabelবাম দিকে চিত্রটিতে ফলাফল দেখা যাচ্ছে।

এখানে চিত্র বর্ণনা লিখুন

আমরা bwlabelব্যবহারের প্রথম আউটপুট প্রসারিত করি imdilate(সমস্ত জিরো বিস্তৃত হয়) এর 3 x 3 ম্যাট্রিক্স ব্যবহার করে 1। ফলাফলটি ছবিতে মাঝখানে প্রদর্শিত হবে।

অবশিষ্ট ক্লিকগুলি নির্ধারণ করতে, আমরা তারপরে স্কোয়ারগুলি গণনা করব যা এই প্রসারিত অঞ্চলে নেই ( ~imdilate()) এবং খনি নয় ( -x) ডানদিকে চিত্রটিতে সাদা স্কোয়ার) এবং এটিকে মোট উন্মুক্ত অঞ্চলগুলির সংখ্যায় (সংখ্যা বাম দিকে চিত্রের বিভিন্ন রঙ) 3 বিভি পেতে।


9

অক্টাভা, 86 84 79 66 বাইট

@(x)nnz(~imdilate(c=imerode(~x,o=ones(3)),o)-x)+max(bwlabel(c)(:))

এই সমাধানটি নামহীন একটি অজানা ফাংশন তৈরি করে ansযা এর পরে 0's এবং 1' এর 2D ম্যাট্রিক্স পাস করা যেতে পারে । যুক্তিটি আমার ম্যাটল্যাব উত্তরের সমান, তবে অষ্টাভে স্থান সংরক্ষণের জন্য কয়েকটি কৌশল ব্যবহার করে।

এই সমাধানটির জন্য imageপ্যাকেজ ইনস্টল করা দরকার।

এখানে ডেমো


2

এমএটিএল, 24 22 21 বাইট (প্রতিদ্বন্দ্বী)

@ লুইসকে ধন্যবাদ 1 বাইট সংরক্ষিত হয়েছে

4Y6Z+~l2#ZIw7MZ+G+~z+

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

ব্যাখ্যা

আবার এটি আমার ম্যাটল্যাব এবং এই প্রশ্নের উত্তর অষ্টাভের অনুরূপ।

        % Implicitly grab input array
4Y6     % Push the literal [1 1 1; 1 1 1; 1 1 1] to the stack
Z+      % Perform 2D convolution of the input with this array
~       % Negate the result
l2#ZI   % Call bwlabeln which dilates each open region and the second output
        % returns the number of open regions
w       % Flip the top two stack elements
7M      % Push the literal [1 1 1; 1 1 1; 1 1 1] to the stack again
Z+      % Perform 2D convolution
G+      % Explicitly grab the input and add it to the result
~z      % Count the number of 0's in the result (the remaining number of clicks)
+       % Add the total number of remaining clicks to the number of open regions 

কেন ননপার্কেটিং?
ক্যালকুলেটরলাইন

1
@ ক্যালকুলেটরফলাইন দুর্ভাগ্যক্রমে চ্যালেঞ্জ পোস্ট হওয়ার পরেbwlabeln কার্যকারিতা এমএটিএল-এর সাথে প্রবর্তিত হয়েছিল।
সোয়েভার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.