उन भेड़ों को पकड़ो!


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}
पावेल

@Phoenix नहींं, प्रत्येक x,yइनपुट एक साथ होना चाहिए। हालांकि अच्छा लगा, मैंने खुद ऐसा नहीं सोचा था।
CzarMatt

निर्देशांक पर सीमाएं क्या हैं? क्या 0s और नकारात्मक संभव है?
19

3
यह आश्चर्यजनक रूप से कठिन है। हर बार जब मुझे लगता है कि मेरे पास एक उत्तराधिकार है जो सभी मामलों को संभालता है, तो कुछ ऐसा है जो मैंने याद किया।
xnor

1
वाह, क्या चुनौती है। मैंने अपना नुकसान स्वीकार किया; पेंच यह 05AB1E में कर रहा है।
मैजिक ऑक्टोपस Urn

जवाबों:


5

जावास्क्रिप्ट (ईएस 6), 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

कैसे?

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

प्रत्येक विभाजन के लिए, हम एक आयत के साथ प्रत्येक समूह में सभी भेड़ों को घेरने के लिए आवश्यक बाड़ की संख्या की गणना करते हैं। इन बाड़ का योग विभाजन का स्कोर देता है। हम अंततः सबसे कम स्कोर लौटाते हैं।

परीक्षण के मामलों


चरण 2 के बारे में, क्यों नहीं [ [1,1],[2,2] ] , [ [1,2] ]?
edc65

@ edc65 उम्मीद है कि अब इसे ठीक किया जाना चाहिए।
अरनुलद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.