फ़ेंसपोस्ट का पता लगाएं


11

पृष्ठभूमि

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

इनपुट

आपका इनपुट वर्णों का एक आयताकार ग्रिड है |-#, जो दो प्रकार के फ़ॉस्टपोस्ट भागों और मलबे का प्रतिनिधित्व करता है, जिसे एक नईलाइन-सीमांकित स्ट्रिंग के रूप में दिया गया है। धमाके की वजह से बाड़पोस्ट बुरी तरह से घिर गए हैं, और कुछ को गर्मी में भी एक साथ जोड़ा गया है। हम एक उम्मीदवार बाड़ को परिभाषित करते हैं जो या तो एक क्षैतिज पैटर्न है जो शुरू होता है और समाप्त होता है |और -उनके बीच एक या एक से अधिक एस (जैसे |-|या |---|लेकिन नहीं ||), या एक ऊर्ध्वाधर पैटर्न जो शुरू होता है और समाप्त होता है -और |उनके बीच एक या अधिक एस होता है (अनिवार्य रूप से एक क्षैतिज उम्मीदवार बाड़पोस्ट 90 डिग्री घुमाया गया)। एक वास्तविक बाड़पोस्ट एक उम्मीदवार बाड़पोस्ट है जो अपने किसी भी हिस्से को किसी अन्य उम्मीदवार बाड़पोस्ट के साथ साझा नहीं करता है।

उत्पादन

आपका आउटपुट इनपुट ग्रिड में वास्तविक बाड़पोस्ट की संख्या है।

उदाहरण

इनपुट ग्रिड पर विचार करें

|#|-|#|##
#||--|||#
###|#|--#
###-||--|
-#-|#-|#-
#---#-#-|
#-#-|#--|

इस ग्रिड में 5 उम्मीदवार बाड़पोस्ट हैं, लेकिन उनमें से केवल 2 वास्तविक बाड़पोस्ट हैं (बोल्ड में दिखाए गए हैं)। इस प्रकार सही उत्पादन होता है 2

नियम

आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है।

अतिरिक्त परीक्षण के मामले

इनपुट:

##--
||##
-#|-
|#|#

आउटपुट: 0(0 उम्मीदवार बाड़पोस्ट)

इनपुट:

-##|-##--
#|#-|#||-
--|-#|#||
##||||-##
||#|--|-|
-#|-#--|#
|####|#-#

आउटपुट: 0(5 उम्मीदवार बाड़पोस्ट)

इनपुट:

#|--|---|-|#
####|##--||-
-|-##||#|---
-#|#-|-#-|||
#|-##--###|-
---#-||-#-##
#|---|###|-#
-|---#-#|#|#
|#--|####-|-

आउटपुट: 4(8 उम्मीदवार बाड़पोस्ट)

इनपुट:

-|-||---##|#
---|######-#
####-##|#--|
|||##|#-||||
####-#-||-#|
---#--|#-#--
-|#-####-##-
#||-|-|-###|
|-##||-||-#-

आउटपुट: 5(7 उम्मीदवार बाड़पोस्ट)

इनपुट:

|#-|#|#-###|#-#
----#####|#----
|#--#-##-#|##-|
|#-|#-|--##||--
||#-#---##|||##
#|#-|||-#-#--||
--#|-||#|--|#|#
-#-|###||-#--#|
-#||-|#-##||##|
|--|-|||-##|-#|

आउटपुट: 4(9 उम्मीदवार बाड़पोस्ट)

इनपुट:

||-|-|-##-#-#-|#--#-
-##|-#|-#-##-|#|--|-
||#---###||-|#|##|-#
#||-#-#-|---|#||#|##
-#-###-##-|-#-|-#||#
##-#--#||-----||-|##
-|--#-#-#|---#-#|#-#
###|-|#-#|-|###|#-|#
#||#-#|--|-||#------
||##|-||#-|--#|#-#-#
|#-|-#-|-|--##-#|||#
-|#--#||##---##|-##-
#|-|-|-||-||#-#-|##-
|-#|##|-|#|#|--||#--

आउटपुट: 9(30 उम्मीदवार बाड़पोस्ट)


तो क्या |--...--|पैटर्न वाइल्डकार्ड्स में पीरियड्स हैं ? क्या इसका मतलब है कि क्षैतिज बाड़ में कम से कम 5 हाइफ़न होने चाहिए? मैं नोटेशन से थोड़ा भ्रमित हूं।
बीएमएसी

@ बीएमएसी उन्हें एक दीर्घवृत्त माना जाता है, जिसका अर्थ है कि कुछ हाइफ़न को छोड़ दिया गया है। मैं मानता हूं कि यह सबसे स्पष्ट संकेतन नहीं है। मुझे कुछ कम अस्पष्ट लगता है।
ज़गारब

यदि हम एक फ़ंक्शन लिखते हैं, तो यह इनपुट के रूप में एक 2 डी-सरणी तर्क ले सकता है, जैसे। [[-,|,-],[#,#,-],[-,-,|]]?
ब्लुटोरेंज

@blutorange नहीं, इस चुनौती में इसे एक स्ट्रिंग होना चाहिए।
ज़गारब

जवाबों:


3

रूबी, 266 268 बाइट्स

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

उदाहरण के लिए। यदि आप a="s";b=aदोनों को निष्पादित करते हैं , aऔर bएक ही स्ट्रिंग को इंगित करते हैं। "test"=="test"सही रिटर्न देता है, लेकिन "test".equal?("test")गलत रिटर्न देता है, क्योंकि हमने दो अलग-अलग स्ट्रिंग ऑब्जेक्ट बनाए हैं।

->d{c=->d,f,v,u{i=0
r=[]
d.map{|y|j=0
e=[]
y.map{|x|f[j]||=[]
f[j][i]=x
x==v ?e[1]?r<<e+[x]&&e=[x]:e[0]?e=[x]:e<<x :x==u&&e[0]?e<<x :e=[]
j+=1}
i+=1}
r}
y=c[d.split.map(&:chars),f=[],?|,?-]+c[f,[],?-,?|]
y.count{|x|y.all?{|q|x.equal?(q)||!(q+x).uniq!(&:object_id)}}}

आइडोन पर टेस्ट केस ।


1
आप mapइसके बजाय का उपयोग कर सकते हैंeach
क्रिस्टियन लुपस्कू

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