समुद्र तट का पता लगाएं


14

आपका कार्य ASCII मानचित्र में प्रदान किए गए द्वीपों के मानचित्र के समुद्र तट की लंबाई का पता लगाना है। इनपुट मानचित्र में 1 या अधिक #वर्ण शामिल होंगे जो भूमि, और रिक्त स्थान दर्शाते हैं जो पानी का संकेत देते हैं। अंतर्देशीय झीलों और द्वीपों सहित समुद्र तट को भूमि और पानी के बीच किसी भी किनारे माना जाता है।

आपका समाधान एक संपूर्ण कार्यक्रम होना चाहिए जो एक फ़ाइल, एक स्ट्रिंग या स्ट्रिंग की एक पंक्ति में पढ़ता है, और स्क्रीन या स्टडआउट के लिए एक पूर्णांक को आउटपुट करता है। प्रत्येक इनपुट लाइन में अग्रणी या अनुगामी स्थान, और शून्य या अधिक हैश वर्ण हो सकते हैं। मानचित्र की सीमाओं को स्थान (जल) माना जाता है।

लाइनें अलग-अलग लंबाई की हो सकती हैं।

उदाहरण:

Input:
##
##
Output: 8

Input:
    ###    ###
  #####     #
   ##
Output: 26

Input:
  #####
  #   #
  # # #
  #   #
  #####
Output: 36

यह कोड गोल्फ है, इसलिए सबसे छोटी बाइट गिनती जीत जाती है।


क्या हम मान सकते हैं कि इनपुट रिक्त स्थान के साथ एक आयत के लिए गद्देदार है?
मार्टिन एंडर

एक पूरा कार्यक्रम क्यों? आमतौर पर फ़ंक्शंस की भी अनुमति है, और मुझे इस चुनौती के लिए प्रतिबंधात्मक होने का एक अच्छा कारण नहीं दिखता है।
निमि

@ मार्टिनबटनर, हाँ। मैं उम्मीद कर रहा था कि "नक्शे की सीमाओं को अंतरिक्ष (पानी) माना जाता है"। मुझे बताएं कि क्या मुझे यह स्पष्ट करना चाहिए।
लॉज नाइट

@ निम्मी, मैं आपकी चिंता को समझता हूं, लेकिन जैसा कि चुनौती 12 घंटे पुरानी है, 4 उत्तर हैं, और अन्य लोग अभी इस पर काम कर सकते हैं, मैं इसे बदलने के लिए अनिच्छुक हूं।
लॉज नाइट

@CarpetPython नहीं मेरा मतलब है कि क्या हम मान सकते हैं कि इनपुट की सभी लाइनों की लंबाई समान है।
मार्टिन एंडर

जवाबों:


14

घोंघे , 8 बाइट्स

A
\#o!\#

Aविकल्प सभी मिलान पथ बल्कि जो अंक एक मैच से सफल होता है शुरू करने की गिनती करने का मतलब है। \#एक का उपयोग करता है #, oएक कार्डिनल दिशा में बदल जाता है, और !\#एक नकारात्मक दावा है जो सफल होता है अगर #हमारे सामने नहीं है।


4

पायथ - 25 23 बाइट्स

सबसे पहले यह इनपुट को रेक्ट में डालता है। फिर " #"इनपुट + स्पेस के ट्रांसपोजिशन और रिवर्सल के 4 से अधिक क्रमों की घटनाओं को गिना जाता है।

/ssm_B++;j;d;CB.t.zd" #

इसे यहाँ ऑनलाइन आज़माएँ


इनपुट के किनारे पर समुद्र तट का पता कैसे लगाया जा सकता है?
feersum

मैंने पहले इसे पैड किया, मैं यह कहना भूल गया।
माल्टीसेन

3

ईएस 6, 123 115 114 बाइट्स

a=>a.map((s,i)=>s.replace(/#/g,(h,j)=>r+=(s[j-1]!=h)+(s[j+1]!=h)+((a[i-1]||'')[j]!=h)+((a[i+1]||'')[j]!=h)),r=0)|r

संपादित करें: सहेजे गए 9 बाइट @ edc65 के लिए धन्यवाद।


मैं इस बारे में अनिश्चित हूं कि एक पूर्ण कार्यक्रम जो स्टडआउट या स्क्रीन पर लिखता है। इसके अलावा: आपको प्रतिस्थापित फ़ंक्शन के परम का उपयोग करना चाहिए। a=>['',...a,''].map((s,i,a)=>s.replace(/#/g,(_,j)=>r+=(s[j-1]!=_)+(s[j+1]!=_)+(a[i-1][j]!=_)+(a[i+1][j]!=_)),r=0)|r
edc65

और बेहतरa=>a.map((s,i)=>s.replace(/#/g,(_,j)=>r+=(s[j-1]!=_)+(s[j+1]!=_)+((a[i-1]||'')[j]!=_)+((a[i+1]||'')[j]!=_)),r=0)|r
edc65

@ edc65 आह, निश्चित रूप से, मैं आंतरिक सरणी मूल्य पर कब्जा करके दो बाइट्स खो देता हूं। इसके अलावा, उस पैरामीटर की जगह पर अच्छी पकड़ है।
नील

2

MATL , 42 बाइट्स

c2\FTFt!*Y+2*qFTFtl-4lhhbvv_2X53$Y+t0>)s2/

यह इनपुट को स्ट्रिंग के सेल सरणी के रूप में स्वीकार करता है

{'#####', '#   #', '# # #', '#   #', '#####'}

यह पहली बार इनपुट को 2D चर सरणी में रखता है, रिक्त स्थान के साथ पैडिंग करता है, और फिर शून्य और लोगों के मैट्रिक्स के लिए। 2 डी-कन्वोकेशन को दो बार लागू किया जाता है, दो अलग-अलग मास्क के साथ: पहला मैट्रिक्स के विस्तार के लिए, दूसरा किनारों का पता लगाने के लिए।

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


0

जाप, 22 19 बाइट्स

4o £UzX è"#%s|#$} x

मान लें कि आयत बनाने के लिए रिक्त स्थान के साथ इनपुट गद्देदार है। इसे ऑनलाइन टेस्ट करें!

यह काम किस प्रकार करता है

          // Implicit: U = input string, S = a space
4o £    } // Create the array [0,1,2,3], and map each item X to:
UzX       //  Rotate U by 90 degrees X times.
è"#%s|#$  //  Count the number of "#"s followed by a space, newline, or end-of-string.
x         // Sum the resulting array.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.