बाहरी से कितनी दूर?


15

अंतरिक्ष के एक 2 डी क्षेत्र को अक्ष संरेखित इकाई वर्ग तत्वों में विभाजित करके अपने केंद्रों के साथ पूर्णांक अंतराल पर संरेखित करें। एक किनारे को आंतरिक कहा जाता है यदि इसे दो तत्वों द्वारा साझा किया जाता है, अन्यथा यह एक बाहरी किनारा है।

आपका लक्ष्य पड़ोसी तत्वों की न्यूनतम संख्या का पता लगाना है, जो कि प्रत्येक तत्व के केंद्र से शुरू होने वाले बाहरी छोर तक पहुंचने के लिए traversal distanceया distanceकम के लिए जाना जाता है । आप केवल एक किनारे (यानी कोई कोने काटने / विकर्ण आंदोलन) के माध्यम से आगे नहीं बढ़ सकते हैं। ध्यान दें कि "बाहरी तत्व" (ऐसे तत्व जिनके पास कम से कम एक बाहरी किनारा है) को बाहरी 0तत्वों तक पहुंचने के लिए पड़ोसी तत्वों को पार करने की आवश्यकता माना जाता है ।

इनपुट

इनपुट सभी तत्वों के केंद्र के x (x, y) को निरूपित करने वाले गैर-नकारात्मक पूर्णांक युग्म की एक सूची है। यह माना जाता है कि कोई अतिव्यापी तत्व नहीं हैं (यानी एक x / y जोड़ी विशिष्ट रूप से एक तत्व की पहचान करती है)। आप तत्व इनपुट ऑर्डर के बारे में कुछ भी नहीं मान सकते हैं

किसी भी स्थान (जैसे 0,0 या 1,1, आदि) पर इनपुट की उत्पत्ति को बदलने के लिए आपका स्वागत है।

आप मान सकते हैं कि सभी इनपुट तत्व जुड़े हुए हैं, या दूसरे शब्दों में उपरोक्त नियमों का उपयोग करके किसी एक तत्व से किसी अन्य तत्व तक यात्रा करना संभव है। ध्यान दें कि इसका मतलब यह नहीं है कि 2 डी क्षेत्र बस जुड़ा हुआ है; इसके अंदर छेद हो सकते हैं।

उदाहरण: निम्नलिखित एक अमान्य इनपुट है।

0,0
2,0

यहां छवि विवरण दर्ज करें

त्रुटि जाँच की आवश्यकता नहीं है।

इनपुट किसी भी स्रोत (फ़ाइल, stdio, फ़ंक्शन पैरामीटर, आदि) से हो सकता है

उत्पादन

आउटपुट को प्रत्येक तत्व की पहचान करने वाले निर्देशांक की एक सूची होनी चाहिए, और एक किनारे पर जाने के लिए इसी पूर्णांक दूरी का पता लगाया जाना चाहिए। आउटपुट किसी भी तत्व क्रम में वांछित हो सकता है (जैसे आपको इनपुट के रूप में प्राप्त उसी क्रम में आउटपुट तत्वों की आवश्यकता नहीं है)।

आउटपुट किसी भी स्रोत (फ़ाइल, stdio, फ़ंक्शन रिटर्न मान आदि) के लिए हो सकता है

कोई भी आउटपुट जो बाहरी दूरी के साथ तत्व के समन्वय से मेल खाता है, ठीक है, जैसे ये सभी ठीक हैं:

x,y: distance
...

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

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

उदाहरण

पाठ उदाहरण इनपुट फार्म में हैं x,y, प्रति पंक्ति एक तत्व के साथ; आप इसे एक सुविधाजनक इनपुट प्रारूप में देखने के लिए स्वागत करते हैं (इनपुट प्रारूप नियम देखें)।

पाठ उदाहरण आउटपुट x,y: distanceप्रति पंक्ति एक तत्व के साथ प्रारूप में हैं ; फिर, आप इसे एक सुविधाजनक ouput प्रारूप में पुन: व्यवस्थित करने के लिए स्वागत करते हैं (आउटपुट स्वरूप नियम देखें)।

चित्रमय आंकड़े निम्न-बायीं ओर (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 Yes
helloworld922

1
अपने उदाहरणों में, आप स्पष्ट रूप से जानकारी नहीं देते हैं।
डेल जॉनसन

@ डेल जोंसन सिर्फ x, y जोड़े के लिए प्रत्येक टेक्स्ट इनपुट के पहले दो कॉलम लेते हैं। मैंने सिर्फ इनपुट के लिए एक अलग उद्धरण बॉक्स नहीं जोड़ा क्योंकि यह थोड़ा लंबा लग रहा था। क्या एक उद्धरण बॉक्स जोड़ने का एक तरीका है और मैन्युअल रूप से यह लंबवत ऊंचाई है?
helloworld922

पड़ोसी तत्वों की न्यूनतम संख्या का पता लगाएं, जिसे बाहरी छोर तक पहुंचने के लिए ट्रैवर्स किया जाना चाहिए , जहां से शुरू होता है? और क्या आप टेस्ट कैस में आउटपुट जोड़ सकते हैं?
लुइस मेन्डो

जवाबों:


2

MATLAB / ऑक्टेव, 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);

व्याख्या

शून्य के साथ भरा उपयुक्त आकार के एस Ource और R esult matrices बनाएँ ।

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 प्रारंभिक संख्या से 4 गुना अधिक है, और तब तक दोहराएं जब तक कि यह नहीं हो। । जब किसी दिए गए बिंदु पर शुरू किया जाता है, तो यह उस बिंदु को बाहरी से कितनी दूर है।


2

MATL , 38 37 36 33 बाइट्स

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

यह भाषा / संकलक के वर्तमान संस्करण (15.0.0) का उपयोग करता है ।

इनपुट प्रारूप है: x मान के साथ एक सरणी और 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 के परिणाम का अर्थ है कि वह पोजीशन अन्य बिंदुओं से घिरा हुआ है, और इसलिए दूरी है- कम से कम 1. बाहरी परिणाम (प्रत्येक बिंदु के लिए 0 या 1) मूल मैट्रिक्स में जोड़ा जाता है। उन स्थितियों में अब 2 होते हैं (प्रक्रिया के अंत में मैट्रिक्स 1 से घटाया जाएगा)।

दृढ़ संकल्प प्रक्रिया पुनरावृत्त होती है। अगले पुनरावृत्ति के लिए, सजा का इनपुट 2 के साथ संचित मैट्रिक्स है; अर्थात, 2 से कम मान 0 पर सेट होते हैं। कनविक्शन का परिणाम इंगित करता है कि किन बिंदुओं में कम से कम 2 है (उनके सभी पड़ोसियों की दूरी कम है)।

इनपुट मैट्रिक्स के कॉलम की संख्या के रूप में, पुनरावृत्तियों की संख्या को सुविधा के लिए चुना जाता है। यह पर्याप्त है (वास्तव में, पुनरावृत्तियों की अधिकतम आवश्यक संख्या न्यूनतम मैट्रिक्स आयाम है)। अंतिम पुनरावृत्तियां बेकार हो सकती हैं, लेकिन कोई नुकसान नहीं है (वे केवल सभी बिंदुओं में 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

PHP, 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";}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.