अकेला द्वीप


10

इनपुट:

एक 2 डी सरणी जिसमें दो अलग (वैकल्पिक) मान हैं। नियम बताते समय 0 और 1 का उपयोग करूंगा । इनपुट प्रारूप बेशक लचीला है।


चुनौती:

शून्य जल हैं, और द्वीप द्वीप हैं। अकेलेपन को सुनिश्चित करने के लिए, आपका काम ज़ीरोस की पंक्तियों और स्तंभों को सम्मिलित करके सभी द्वीपों को पानी से घेरना है। आप पानी को बर्बाद नहीं करना चाहते हैं, इसलिए आपको पानी की मात्रा कम से कम करनी चाहिए। मामले में एक से अधिक समाधान हैं जिन्हें समान मात्रा में पानी की आवश्यकता होती है, तो आपको पंक्तियों को नहीं, बल्कि पानी के स्तंभों को जोड़ना चाहिए। मैं इसे परीक्षण मामलों में दिखाऊंगा।


आउटपुट:

नया, संशोधित 2D सरणी। आउटपुट स्वरूप निश्चित रूप से लचीला है।


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

इनपुट और आउटपुट डैश द्वारा अलग किए गए हैं। जोड़े गए शून्य को बोल्ड फ़ॉन्ट में दिखाया गया है। यदि आप परीक्षण के मामलों को और अधिक सुविधाजनक प्रारूपों में बदलना चाहते हैं, तो यहां दिए गए उत्तरों में से एक का उपयोग करें ।

1
---
1

1 1
---
1 0 1

1 1
1 1
---
1 0 1
0 0 0
1 0 1

1 0
0 1
---
1 0 0
0 0 1

ध्यान दें कि हमने शून्य का एक कॉलम जोड़ा है, न कि शून्य की एक पंक्ति। ऐसा इसलिए है क्योंकि आवश्यक शून्य की संख्या बराबर है, और कॉलम को प्राथमिकता दी जानी चाहिए।


1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
---
1 0 0 0 1
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 1 0 1 0

ध्यान दें कि हमने पंक्तियों को जोड़ा, स्तंभों से नहीं, क्योंकि इसके लिए कम से कम अतिरिक्त शून्य की आवश्यकता है।


0 0 1 0 0
0 1 1 1 0
---
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 1 0

इसके लिए स्तंभ और पंक्ति दोनों की आवश्यकता थी।


0 0 1 0 0
0 1 0 1 0
---
0 0 0 1 0 0 0
0 1 0 0 0 1 0

एक पंक्ति से दो कॉलम जोड़ने के लिए बेहतर है, क्योंकि इसमें कम पानी की आवश्यकता होती है।


0 0
1 0
0 1
1 0
0 0
---
0 0 
1 0
0 0 
0 1 
0 0 
1 0
0 0

एक स्तंभ से दो पंक्तियों को जोड़ने के लिए बेहतर है, क्योंकि इसमें कम पानी की आवश्यकता होती है।



डेमनिट, स्टेवी, अब मुझे "जैक स्पैरो" फिर से मेरे सिर में फंस गया है!
झबरा

यह समस्या द्विदलीय ग्राफ़ पर वर्टेक्स कवर समस्या के बराबर है, और विकिपीडिया के अनुसार इसे बहुपद समय में हल किया जा सकता है।
user202729

मैंने अपना मन बदल दिया ... यह भारित हो सकता है। वैसे भी पर्याप्त रूप से बड़े वर्ग मैट्रिक्स के लिए यह (उम्मीद है) बराबर है। इसलिए यदि आपका एल्गोरिथ्म "बहुत सरल" है, तो सावधान रहें
user202729

मुझे लगता है कि मेरे पास एक बहुपद समय एल्गोरिथ्म है।
user202729

जवाबों:


2

जेली , 37 बाइट्स

ṫƤ-S€ZƊ⁺FỊẠ
Z_,,WƲ€ŒpẎ€Ʋ⁺€ẎLÞFL$ÞṚÇÞṪ

इसे ऑनलाइन आज़माएं!

पूर्णांक के 2 डी सरणी को लौटाने का कार्य। ध्यान दें कि स्वाभाविक रूप से जेली सिंगलटन सूची में इसका मूल्य प्रदर्शित होता Gहै इसलिए इसका उपयोग आउटपुट स्वरूपित करने के लिए किया जाता है।


  • लिंक 1: रिटर्न (वैधता)।
  • लिंक 2: मुख्य कार्यक्रम।

कार्यक्रम घातीय समय में चलता है, लेकिन अभी तक मैं किसी भी बहुपद समय एल्गोरिथ्म के बारे में नहीं सोच सकता था। Ƥडाइएडिक फ़ंक्शन पर उपयोग , वह सुविधा चुनौती को स्थगित कर देती है।


2

पायथन 2 , 374 346 340 339 323 317 बाइट्स

R=range;L=len
def f(a):
 w,h=L(a[0]),L(a);W=[]
 for i in R(2**w):
	A=zip(*a)
	for c in R(w):A[-c:-c]=[[0]*h]*(i&1<<c>0)
	for j in R(2**h):
	 B=zip(*A);x=L(B[0])
	 for r in R(h):B[-r:-r]=[(0,)*x]*(j&1<<r>0)
	 y=L(B);W+=[(w*h-x*y,x,B)]*all(sum(B[i][j:j+2]+B[i+1][j:j+2])<2for i in R(y-1)for j in R(x))
 return max(W)[2]

इसे ऑनलाइन आज़माएं!


मुझे लगता है कि सबसे पहले [:]आउटपुट को प्रभावित किए बिना हटाया जा सकता है।
user202729

@ user202729, धन्यवाद, मुझे लगता है कि यह कर सकता है। मैं इसे इस बीच बदल दिया था, हालांकि :)
TFeld
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.