বহি থেকে কত দূরে?


15

অক্ষের সাথে সংযুক্ত ইউনিট বর্গক্ষেত্র উপাদানগুলির কেন্দ্রগুলির সাথে পূর্ণসংখ্যার বিরতিতে সারিবদ্ধভাবে বিভক্ত একটি 2D অঞ্চল নিয়ে যান। একটি প্রান্তটি অভ্যন্তরীণ বলে যদি এটি দুটি উপাদান দ্বারা ভাগ করা হয়, অন্যথায় এটি বাহ্যিক প্রান্ত।

আপনার লক্ষ্যটি হ'ল প্রতিবেশী উপাদানগুলির ন্যূনতম সংখ্যার সন্ধান করুন যা প্রতিটি উপাদানটির কেন্দ্র থেকে শুরু করে বাহ্যিক প্রান্তে পৌঁছতে অবশ্যই প্রবেশ করতে হবে, যা হিসাবে পরিচিত traversal distanceবা distanceসংক্ষেপে for আপনি কেবল একটি প্রান্ত দিয়ে যেতে পারেন (অর্থাত্ কোন কোণে কাটা / তির্যক গতিবিধি নয়)। নোট করুন যে "বাহ্যিক উপাদান" (যে উপাদানগুলির অন্তত একটি বাহ্যিক প্রান্ত রয়েছে) 0বহির্মুখী প্রান্তে পৌঁছানোর জন্য প্রতিবেশী উপাদানগুলি অতিক্রম করতে হবে বলে মনে করা হয় ..

ইনপুট

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

ইনপুটটির উত্স যে কোনও স্থানে রূপান্তর করতে আপনাকে স্বাগত জানানো হয়েছে (উদাঃ 0,0 বা 1,1, ইত্যাদি)।

আপনি ধরে নিতে পারেন যে সমস্ত ইনপুট উপাদান সংযুক্ত রয়েছে, বা অন্য কথায় উপরের নিয়মগুলি ব্যবহার করে যে কোনও একটি উপাদান থেকে অন্য কোনও উপাদানে ভ্রমণ করা সম্ভব। মনে রাখবেন যে এর অর্থ এই নয় যে 2 ডি অঞ্চলটি কেবল সংযুক্ত; এটির ভিতরে গর্ত থাকতে পারে।

উদাহরণ: নিম্নলিখিতটি একটি অবৈধ ইনপুট।

0,0
2,0

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

ত্রুটি পরীক্ষা করার প্রয়োজন হয় না।

ইনপুটটি কোনও উত্স থেকে (ফাইল, স্টডিও, ফাংশন প্যারামিটার ইত্যাদি) হতে পারে from

আউটপুট

আউটপুটটি প্রতিটি উপাদান সনাক্তকারী স্থানাঙ্কের একটি তালিকা হতে হবে এবং প্রান্তে পৌঁছানোর জন্য সংশ্লিষ্ট সংখ্যার দূরত্বকে চিহ্নিত করা উচিত। আউটপুটটি যে কোনও উপাদান ক্রমে পছন্দসই হতে পারে (যেমন আপনাকে ইনপুট হিসাবে প্রাপ্ত একই ক্রমে আউটপুট উপাদানগুলির প্রয়োজন হবে না)।

আউটপুটটি কোনও উত্স হতে পারে (ফাইল, স্টডিও, ফাংশন রিটার্ন মান, ইত্যাদি)

বাহ্যিক দূরত্বের সাথে উপাদানটির স্থানাঙ্কের সাথে মেলে এমন কোনও আউটপুট ঠিক আছে, যেমন এগুলি সবই ঠিক আছে:

x,y: distance
...

[((x,y), distance), ...]

[(x,y,distance), ...]

উদাহরণ

পাঠ্য উদাহরণের ইনপুটগুলি ফর্মটিতে রয়েছে x,y, প্রতি লাইনে একটি উপাদান রয়েছে; আপনি একটি সুবিধাজনক ইনপুট ফর্ম্যাট এ পুনরায় আকার দিতে স্বাগত জানাই (ইনপুট ফর্ম্যাট নিয়ম দেখুন)।

পাঠ্য উদাহরণের আউটপুটগুলি বিন্যাসে থাকে x,y: distance, প্রতি লাইনে একটি উপাদান থাকে; আবার, আপনি একটি সুবিধাজনক আউটপুট ফর্ম্যাট (আউটপুট ফর্ম্যাট নিয়ম দেখুন) এ পুনরায় আকার দিতে স্বাগত জানাই।

গ্রাফিকাল পরিসংখ্যানগুলির নিম্ন-বাম দিকে আবদ্ধ (0,0) রয়েছে এবং ভিতরে সংখ্যাগুলি প্রত্যাশিত সর্বনিম্ন দূরত্বকে বহির্মুখী প্রান্তে পৌঁছানোর প্রতিনিধিত্ব করে। মনে রাখবেন যে এই পরিসংখ্যানগুলি কেবল নিরীক্ষণের উদ্দেশ্যে; আপনার প্রোগ্রাম এই আউটপুট প্রয়োজন হয় না।

উদাহরণ 1

ইনপুট:

1,0
3,0
0,1
1,2
1,1
2,1
4,3
3,1
2,2
2,3
3,2
3,3

আউটপুট:

1,0: 0
3,0: 0
0,1: 0
1,2: 0
1,1: 1
2,1: 0
4,3: 0
3,1: 0
2,2: 1
2,3: 0
3,2: 0
3,3: 0

গ্রাফিকাল উপস্থাপনা:

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

উদাহরণ 2

ইনপুট:

4,0
1,1
3,1
4,1
5,1
6,1
0,2
1,2
2,2
3,2
4,2
5,2
6,2
7,2
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
2,4
3,4
4,4
5,4
6,4
3,5
4,5
5,5

আউটপুট:

4,0: 0
1,1: 0
3,1: 0
4,1: 1
5,1: 0
6,1: 0
0,2: 0
1,2: 1
2,2: 0
3,2: 1
4,2: 2
5,2: 1
6,2: 1
7,2: 0
1,3: 0
2,3: 1
3,3: 2
4,3: 2
5,3: 2
6,3: 1
7,3: 0
8,3: 0
2,4: 0
3,4: 1
4,4: 1
5,4: 1
6,4: 0
3,5: 0
4,5: 0
5,5: 0

গ্রাফিকাল উপস্থাপনা:

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

উদাহরণ 3

ইনপুট:

4,0
4,1
1,2
3,2
4,2
5,2
6,2
8,2
0,3
1,3
2,3
3,3
4,3
5,3
6,3
7,3
8,3
9,3
1,4
2,4
3,4
4,4
5,4
6,4
7,4
8,4
9,4
2,5
3,5
4,5
5,5
6,5
9,5
10,5
11,5
3,6
4,6
5,6
9,6
10,6
11,6
6,7
7,7
8,7
9,7
10,7
11,7

আউটপুট:

4,0: 0
4,1: 0
1,2: 0
3,2: 0
4,2: 1
5,2: 0
6,2: 0
8,2: 0
0,3: 0
1,3: 1
2,3: 0
3,3: 1
4,3: 2
5,3: 1
6,3: 1
7,3: 0
8,3: 1
9,3: 0
1,4: 0
2,4: 1
3,4: 2
4,4: 2
5,4: 2
6,4: 1
7,4: 0
8,4: 0
9,4: 0
2,5: 0
3,5: 1
4,5: 1
5,5: 1
6,5: 0
9,5: 0
10,5: 0
11,5: 0
3,6: 0
4,6: 0
5,6: 0
9,6: 0
10,6: 1
11,6: 0
6,7: 0
7,7: 0
8,7: 0
9,7: 0
10,7: 0
11,7: 0

গ্রাফিকাল উপস্থাপনা:

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

স্কোরিং

এটি কোড গল্ফ। বাইটস মধ্যে সংক্ষিপ্ত কোড। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য। এই সমস্যাটি সমাধানের জন্য বিশেষভাবে ডিজাইন করা ব্যতীত অন্য কোনও বিল্ট-ইন অনুমোদিত।


আমরা কি [((1,0), 0), ...] হিসাবে আউটপুট দিতে পারি?
lirtosiast

@lirtosiast হ্যাঁ
helloworld922

1
আপনার উদাহরণগুলিতে, আপনি ইনপুটগুলি স্পষ্টভাবে বর্ণনা করবেন না।
ডেল জনসন

@ ডেল জনসন এক্স, ওয়াই জোড়ার জন্য প্রতিটি পাঠ্য ইনপুটটির প্রথম দুটি কলাম নিন। কিছুটা দীর্ঘ হয়ে গেছে বলে মনে হচ্ছে কেবল ইনপুটগুলির জন্য আমি একটি পৃথক উদ্ধৃতি বাক্স যোগ করিনি। একটি উদ্ধৃতি বাক্স যুক্ত করার এবং ম্যানুয়ালি এটির উল্লম্ব উচ্চতা সীমাবদ্ধ করার কোনও উপায় আছে কি?
helloworld922

বহির্মুখী প্রান্তে পৌঁছানোর জন্য প্রতিবেশী উপাদানগুলির ন্যূনতম সংখ্যার সন্ধান করুন কোথা থেকে শুরু করুন? এবং আপনি পরীক্ষা caes মধ্যে আউটপুট যোগ করতে পারেন?
লুইস মেন্ডো

উত্তর:


2

ম্যাটল্যাব / অষ্টাভে, 143 বাইট

function [v,x,y]=d(x,y)R=S=zeros(max(y+3),max(x+3));i=sub2ind(size(S),y+2,x+2);S(i)=1;while nnz(S=imerode(S,strel('disk',1,0)))R+=S;end;v=R(i);

Ungolfed

function [v,x,y]=d(x,y)
  R=S=zeros(max(y+3),max(x+3));
  i=sub2ind(size(S),y+2,x+2);
  S(i)=1;
  while nnz(S=imerode(S,strel('disk',1,0)))
    R+=S;
  end;
  v=R(i);

ব্যাখ্যা

জিরোতে ভরা উপযুক্ত আকারের এস আয়েস এবং আর এসল্ট ম্যাট্রিকগুলি তৈরি করুন ।

R=S=zeros(max(y+3),max(x+3));

xyসীমানায় একটি উপাদান প্যাডিং সহ জোড়গুলির সাথে সামঞ্জস্য করা লিনিয়ার সূচকগুলি গণনা করুন ।

i=sub2ind(size(S),y+2,x+2);

কাঠামো আঁকুন।

S(i)=1;

Sউদাহরণ 2 এর জন্য এখানে দেখানো হয়েছে :

0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   1   0   0   0   0   0
0   0   1   0   1   1   1   1   0   0   0
0   1   1   1   1   1   1   1   1   0   0
0   0   1   1   1   1   1   1   1   1   0
0   0   0   1   1   1   1   1   0   0   0
0   0   0   0   1   1   1   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0

চিত্র ক্ষয়ের দ্বারা সমস্ত সীমান্ত উপাদান সরান

S=imerode(S,strel('disk',1,0))

ব্যাসার্ধ 1 সহ স্ট্রাকচারিং উপাদান ডিস্ক ব্যবহার করুন :

0   1   0
1   1   1
0   1   0

যদি তির্যক আন্দোলনের অনুমতি দেওয়া হয় তবে আমরা এর পরিবর্তে আয়তক্ষেত্রটি ব্যবহার করব:

1   1   1
1   1   1
1   1   1

তারপরে, সমস্ত সীমান্তের উপাদানগুলির জন্য ফলাফল বৃদ্ধি করুন

R+=S;

এবং চিত্রটি সম্পূর্ণ ক্ষয় না হওয়া পর্যন্ত লুপ করুন।

while nnz(S)

প্রতিটি xyজোড়ের জন্য ফলাফলটি ফিরিয়ে দিন।

v=R(i);

2

পাইথ, 26 বাইট

V]MQNf>*4Nl=Nsmfq1.a,dYQN0

উদাহরণ 2

আমি ব্যবহৃত আউটপুট ফর্ম্যাটটি হ'ল:

[[4, 3]]
2

এটি হ'ল বিন্দু সহ একটি তালিকা, তার পরে বহির্মুখী থেকে দূরত্ব।

কোডটি বর্তমানে পৌঁছে যাওয়া সেটটি ব্যবহার করে, প্রতিটি বিন্দুর জন্য সমস্ত পয়েন্টের জন্য ইনপুট ফিল্টার করে সেই বিন্দু থেকে ঠিক 1 দুরের দূরত্বে, এবং ফলাফলগুলির পয়েন্টের সংখ্যাটি শুরু সংখ্যার চেয়ে 4 গুণ বেশি কিনা এবং তা না হওয়া পর্যন্ত পুনরাবৃত্তি করে কাজ করে । যখন কোনও নির্দিষ্ট বিন্দুতে শুরু করা হয়, এটি দেয় যে বিন্দুটি বহির্মুখী থেকে কতটা দূরে।


2

এমএটিএল , 38 37 36 33 বাইট

1Z?t"tX@<~5Bt!Z~2X53$Y+4=+]3#fqhh

এটি ভাষা / সংকলকের বর্তমান সংস্করণ (15.0.0) ব্যবহার করে।

ইনপুট ফর্ম্যাটটি হল: এক্স মানগুলির সাথে একটি অ্যারে এবং y মানগুলির সাথে একটি অ্যারে । ইনপুট এবং আউটপুট 1-ভিত্তিক। সুতরাং পরীক্ষার ক্ষেত্রে নিম্নলিখিত ইনপুট রয়েছে:

[2 4 1 2 2 3 5 4 3 3 4 4]
[1 1 2 3 2 2 4 2 3 4 3 4]

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

[5 5 2 4 5 6 7 9 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 10 3 4 5 6 7 10 11 12 4 5 6 10 11 12 7 8 9 10 11 12]
[1 2 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 7 7 7 7 7 7 8 8 8 8 8 8]

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

ব্যাখ্যা

একটি ম্যাট্রিক্স প্রাথমিকভাবে ইনপুট অবস্থানগুলিতে 1 এবং অন্যথায় 0 দিয়ে নির্মিত হয়। তারপরে একটি "উত্তর, পূর্ব, দক্ষিণ, পশ্চিম" মুখোশ ( [0 1 0; 1 0 1; 0 1 0]) দিয়ে একটি সমাবর্তন প্রয়োগ করা হয় এবং প্রতিটি অবস্থানের ফলাফলকে 4 এর সাথে তুলনা করা হয় 4 এর ফলাফলের অর্থ এই অবস্থানটি অন্যান্য পয়েন্টগুলি দ্বারা বেষ্টিত থাকে এবং তাই দূরত্ব- কমপক্ষে বাইরের দিকে কমপক্ষে ১. ফলাফল (প্রতিটি পয়েন্টের জন্য 0 বা 1) মূল ম্যাট্রিক্সে যুক্ত করা হয়। সেই অবস্থানগুলিতে এখন 2 টি রয়েছে (প্রক্রিয়া শেষে ম্যাট্রিক্স 1 দ্বারা হ্রাস পাবে)।

কনভোলশন প্রক্রিয়া পুনরাবৃত্তি হয়। পরবর্তী পুনরাবৃত্তির জন্য, কনভ্যুশনের ইনপুটটি সংশ্লেষিত ম্যাট্রিক্স থ্রোসোল্ডড 2 সহ; এটি হল, 2 এর চেয়ে কম মানগুলি 0 তে সেট করা হয়েছে সমঝোতার ফলাফলটি নির্দেশ করে যে কোন পয়েন্টের অন্তত 2 আছে (তাদের সমস্ত প্রতিবেশীর দূরত্ব 1)।

ইনপুট ম্যাট্রিক্সের কলামগুলির সংখ্যা হিসাবে সুবিধার্থে পুনরাবৃত্তির সংখ্যা নির্বাচন করা হয়। এটি যথেষ্ট (বাস্তবে, পুনরাবৃত্তির সর্বাধিক প্রয়োজনীয় সংখ্যা ন্যূনতম ম্যাট্রিক্সের মাত্রার অর্ধেক)। শেষ পুনরাবৃত্তিগুলি অকেজো হতে পারে তবে কোনও ক্ষতি করবেন না (তারা কেবল সমস্ত পয়েন্টে 0 যোগ করে)।

প্রক্রিয়া শেষে 1 টি ফলাফল থেকে বিয়োগ করা হয়, কারণ মান k সহ পজিশনের বহিঃস্থরে দূরত্ব k -1 থাকে। সমস্ত অবস্থানের স্থানাঙ্ক এবং মানগুলি উত্তোলন এবং প্রদর্শিত হয়।

           % take x and y implicitly
1          % push 1
Z?         % build sparse matrix from that x, y indices with 1 as value
t          % duplicate
"          % for each column of that matrix
  t        %   duplicate
  X@       %   push iteration index
  <~       %   true for matrix entries that are >= iteration index
  5B       %   5 in binary: row vector [1 0 1]
  t!       %   duplicate and transpose into a column vector
  Z~       %   element-wise XOR with broadcast: gives desired mask,
           %   [0 1 0; 1 0 1; 0 1 0]
  2X53$Y+  %   2D convolution. Output has same size as input
  4=       %   compare with 4: are all neighbouring positions occupied?
  +        %   add to accumulated matrix from previous iteration
]          % end for each
3#f        % extract row index, column index and value for nonzero
           % entries. In this case all entries are nonzero
q          % subtract 1 to value to yield distance to exterior
hh         % concatenate vertically twice
           % display implicitly 

1

পাইথন 3, 180 166 160 বাইট

def f(l,d=0):
 l=set(l);
 if l:i={(a,b)for a,b in l if all([x in l for x in[(a+1,b),(a-1,b),(a,b+1),(a,b-1)]])};return{(c,d)for c in l-i}|f(i,d+1)
 return set()

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

অবশ্যই উন্নতির জন্য জায়গা আছে মনে করুন - সংলগ্ন প্রতিবেশীদের চেক করার সর্বোত্তম উপায় কোনটি?

সম্পাদনা করুন: আমাকে টিপলস হিসাবে জোড়ার একটি তালিকা গ্রহণ করার অনুমতি দেওয়া উচিত।


0

পিএইচপি, 316 বাইট

<?preg_match_all("#^(\d+),(\d+)#m",$_GET[i],$t);foreach($t[1]as$k=>$v)$a[$v][$t[2][$k]]=0;function w($x,$y){global$a;return isset($a[$x][$y])?$a[$x][$y]:-1;};for(;$z++<max($t[2]);$o=$s,$s="")foreach($a as$x=>$b)foreach($b as$y=>$c)$s.="\n$x,$y: ".$a[$x][$y]=1+min(w($x+1,$y),w($x-1,$y),w($x,$y-1),w($x,$y+1));echo$o;

অনলাইন সংস্করণ

ভাঙ্গন

preg_match_all("#^(\d+),(\d+)#m",$_GET[i],$t); 
foreach($t[1]as$k=>$v) 
$a[$v][$t[2][$k]]=0;  # make a 2 D array
function w($x,$y){global$a;return isset($a[$x][$y])?$a[$x][$y]:-1;};# check the neighbours
for(;$z++<max($t[2]);$o=$s,$s="") # stored the last loop string first run make possible to 1 and so on
foreach($a as$x=>$b) # x values
foreach($b as$y=>$c) # y values
$s.="\n$x,$y: ".$a[$x][$y]=1+min(w($x+1,$y),w($x-1,$y),w($x,$y-1),w($x,$y+1)); # concanate array item x+y+value
echo$o; #Output

Ascii চর হিসাবে ভিজ্যুয়ালাইজ করুন

ksort($a); 
foreach($a as$x=>$b){
for($y=0;$y<=max($t[2]);$y++)
echo isset($a[$x][$y])?$a[$x][$y]:" ";
#The better way would be make a SVG and use the text element and use a factor
#echo '<text x="'.($x*$factor).'" y="'.($y*$factor).'">'.$a[$x][$y].'</text>';
echo"\n";}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.