झीलों में भरें


19

ASCII के चित्र प्रारूप में भूमि की स्थलाकृति को देखते हुए, यह पता लगाएं कि झीलें कहाँ जाएँगी और उन्हें भर देंगी।

उदाहरण

इनपुट

         #               
         ##              
      # ####             
#    #########           
##  ###########          
## #############   ####  
## ##############  ##### 
################# #######
#########################
#########################

उत्पादन

         #               
         ##              
      #@####             
#@@@@#########           
##@@###########          
##@#############@@@####  
##@##############@@##### 
#################@#######
#########################
#########################

इनपुट में केवल रिक्त स्थान और #निशान होंगे। प्रत्येक पंक्ति समान लंबाई होगी। आउटपुट #रिक्त स्थानों के साथ समान पैटर्न होना चाहिए जहां पानी @निशान से भरा होगा ।

नीचे की इनपुट पंक्ति हमेशा सभी # अंकों की होगी। भूमि में कोई छेद या अधिकता नहीं होगी। सबसे छोटा कोड जीतता है।


यह थोड़ा आसान लगता है। मुझे लगता है कि हमें उन झील इकाइयों की संख्या भी प्रदर्शित करनी चाहिए थी @जो भर
चुकी थीं

1
@ ममलमोक: यह मोटे तौर पर ([char[]]"$a"-eq'@').Countयहां होगा। इतना भी नहीं जोड़ते। इस पर सहमत होना थोड़ा आसान है, हालांकि। हालांकि मैं जो कुछ भी करूंगा, उसके दायरे में नहीं आता।
जोए

3
स्टैक ओवरफ्लो पर संबंधित: कोड गोल्फ: रनिंग वॉटर । लीरनुना में से एक बेहतर, मैंने सोचा।
dmckee

1
तो क्या हमें भूमिगत गुफाओं को भी संभालना होगा, जो जल स्तर से ऊपर हवा में चल रही जल पहेली की तरह हो सकती हैं? यह चीजों को थोड़ा अधिक चुनौतीपूर्ण बनाता है और मुझे लगता है कि निश्चित रूप से एक उदाहरण उपयोग मामला होना चाहिए।
मेलमोकब

@ डमकी: हालांकि यह उतना आसान नहीं था।
जोए

जवाबों:


8

sed -r, 27 24 (27 के साथ -r)

24 (27):

:;s/(#|@) ( *#)/\1@\2/;t

27 (30):

:e;s/([#@]) ( *#)/\1@\2/;te

दो पर्ल समाधानों के बेहतर के साथ प्रतिस्पर्धा करता है


#|@एक चार छोटा होगा
आप

2
-R ध्वज के लिए आपको गिनती में 3 जोड़ना चाहिए। आप eएस को हटाने से दो को काट सकते हैं , और एस.मार्क के एक अन्य से 27 तक वापस लाने के सुझाव से।
नब्ब

@ नब थैंक्स, खाली लेबल के साथ कुछ खोजा
asoundmove

मैंने पहले सेड की कोशिश की, लेकिन असफल रहा
मिंग-तांग

@ कीथ, पुरस्कार के लिए धन्यवाद।
asoundmove

7

पर्ल, २५

s/# +#/$_=$&;y| |@|;$_/ge

मैंने एक वर्ण गणना जोड़ी। कृपया देखें कि क्या यह वास्तव में सही है, क्योंकि इसमें कुछ दुभाषिया झंडे ( -pशायद?) को शामिल करने की आवश्यकता हो सकती है ।
जॉय

मैं पर्ल भाषा नहीं जानता, लेकिन मैं इसकी शक्ति महसूस कर सकता हूँ :)
चींटी

वास्तव में इसे मेरे बॉक्स पर कार्य करने के लिए `-पे` की आवश्यकता है, ताकि अतिरिक्त 4 वर्ण होना चाहिए। या eगिनती नहीं है और इस प्रकार केवल 3 अतिरिक्त वर्णों की आवश्यकता है?
asoundmove

ई की जरूरत नहीं है, जैसे मैंने अन्यत्र उल्लेख किया है, उसी कारणों से। :)
रॉबर्ट पी

6

1
सिवाय इसके कि यदि नायब सही है, तो आपको `-प` को 3 वर्णों के रूप में गिनना होगा, जिससे आपका कुल 27 हो जाएगा। और इसके लिए वास्तव में` . I don't know the full rules about flags, so not sure the -प ई` काउंट की आवश्यकता होती है ।
asoundmove

वास्तव में ई की जरूरत नहीं होगी, अगर आप बस एंट्री मारते हैं और बाद में टाइप करते हैं, या कोड को एक फाइल में डालते हैं और उसे चलाते हैं। तो-वास्तव में जरूरत नहीं है। :)
राबर्ट पी


2

रेटिना , 10 बाइट्स

इस चुनौती की तुलना में रेटिना (बहुत) नया है। लेकिन यह समाधान बहुत साफ है कि इसे पोस्ट न करें:

T` `@`#.*#

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

यह केवल एक लिप्यंतरण चरण है, जो रिक्त स्थान को बदल देता है @, लेकिन यह संचालन माचिस के #.*#पात्रों तक सीमित रहता है , जो दोनों ओर से भूमि से घिरा होता है।


1

रूबी 1.8, 30 अक्षर

#!ruby -p
gsub(/# +#/){$&.tr" ","@"}

अगर किसी को पता है कि यह रूबी 1.9 (1.9.2p0 और 1.9.2p204 के साथ परीक्षण) में काम क्यों नहीं करता है, भले ही प्रलेखन कहता है कि यह काम करना चाहिए , मुझे बताएं!


यह वास्तव में अजीब है, $_=$_.दूसरी पंक्ति की शुरुआत में जोड़ना 1.9.2 में काम करता है इसलिए यह कुछ करना है Kernel.gsub। रुबिनियस भी स्पष्ट रूप से जोड़ने के बिना विफल रहता है $_
निमो 157

1.9.1 समाचार के अनुसार, कर्नेल # गेटक, # जीसुब, # एसयूबी को हटा दिया गया है।
आप

1
मुझे लगता है कि आप इसे -pध्वज की आवश्यकता के लिए 30 (27 + 3 ) के रूप में गिन सकते हैं । हैश-बैश और दुभाषिया का नाम गिनती नहीं है।
कालेब

1

पायथन, 95 92 बाइट्स

for s in S.split('\n'):b=s.find('#');e=s.rfind('#');print s[:b]+s[b:e].replace(' ','@')+s[e:]

1

05AB1E , 17 16 बाइट्स

|εγć?D¨ð'@:sθJJ,

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

स्पष्टीकरण:

|            # Take all input-lines as list
 ε           # For each line:
  γ          #  Split the line into chunks of consecutive equal characters
             #   i.e. " ##   # " → [' ','##','   ','#',' ']
   ć         #  Split into head and the rest of the list
             #   i.e. [' ','##','   ','#',' '] → ['##','   ','#',' '] and ' '
    ?        #  Print this head
   D         #  Duplicate the rest of the list
    ¨        #  Remove the last element
             #   i.e. ['##','   ','#',' '] → ['##','   ','#']
     ð'@:    #  Replace every space with a "@"
             #   i.e. ['##','   ','#'] → ['##','@@@','#']
     sθ      #  Swap so the duplicated list is at the top, and take the last item as is
             #   i.e. ['##','   ','#',' '] → ' '
         JJ  #  Join the lists and individual items in the list together to a single string
             #   i.e. ['##','@@@','#'] and ' ' → "##@@@# "
           , #  Print with trailing new-line

0

जावास्क्रिप्ट, 107 बाइट्स

var f=function(x){return x.replace(/# +#/g, function(x){return "#"+new Array(x.length-1).join("@")+"#";})};

Ungolfed:

var f = function(x) {
    return x.replace(/# +#/g, function(x){
        return "#" + new Array(x.length - 1).join("@") + "#";
    })
};

मेरा सुझाव है कि आप (1) अपने उत्तर के सामान्य रूप से स्वरूपित संस्करण को पोस्ट करते हैं, इसलिए इसे पढ़ना आसान है और इसके साथ अनुसरण करना आसान है और (2) ईएस 6 पर गौर करें ... यह आपको अपने कार्यों के साथ बहुत सारे पात्रों को बचा सकता है ।
SirPython

मैं एक सामान्य संस्करण पोस्ट करूंगा, लेकिन मैं ES6- टाइप व्यक्ति नहीं हूं।
BobTheAwesome

@BusTheAwesome आपने सिर्फ इस संपादन का सुझाव क्यों दिया ?
टिम

ओह अच्छाई, मैं टेस्ट-केस त्रुटि को ठीक करने का प्रयास कर रहा था, लेकिन मेरे पास क्रोम में यह एक्सटेंशन सक्षम है, अगर आप xkcd जानते हैं। उसके लिए माफ़ करना।
BobTheAwesome

ES6 सामान के अलावा: आप अल्पविराम के बाद जगह की जरूरत नहीं है, आप दूसरे के बाद अंतरिक्ष की जरूरत नहीं है return, और आप दो अर्धविराम निकाल सकते हैं, और यह सिर्फ किया जा सकता है function f(x)...याf=function(x)...
Zachary

0

पायथन, 108 106 92 बाइट्स

import re
n=1
while n: S,n=re.subn('# +#',lambda m:'#'+'@'*len(m.group(0)[2:])+'#',S)
print S


0

पिप , 15 बाइट्स

aR:`#.*#`_TRs'@

कमांड-लाइन तर्क के माध्यम से मल्टीलाइन स्ट्रिंग के रूप में इनपुट लेता है: इसे ऑनलाइन आज़माएं! (वैकल्पिक रूप से, -rnझंडे निर्दिष्ट करें और पहले aको बदलें g, और आप स्टड के माध्यम से इनपुट दे सकते हैं: इसे ऑनलाइन आज़माएं! )

रेटिना जवाब के रूप में एक ही विचार: मैच में स्थान बदलने #.*#के परिणाम के साथ रेगेक्स के प्रत्येक मैच को बदलें @। पिप एक शुद्ध रेगेक्स समस्या के लिए रेटिना की मरोड़ से मेल नहीं खा सकता है - लेकिन यह हर रोज नहीं है कि आप जेली के साथ टाई कर सकते हैं, आखिरकार।

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