फेलिंग कैस्टल्स का पता लगाएं


40

गुरुत्वाकर्षण के दिलचस्प पहलुओं में से एक यह है कि, जहां तक ​​मुझे जानकारी है, आप सिर्फ मिडेयर में तैरते हुए सामान नहीं रख सकते।

हालांकि, ऐसा लगता है कि रैंडम कैसल बिल्डर्स के एसोसिएशन में हर कोई इस तथ्य से अवगत नहीं है, इस तरह के महल के लिए अग्रणी:

                      #
                      #
    #  #      #  #   ###
    ####      ####   # #
    #### #  # ####   ###
    ##############   ###
    ######  ######   ###
    #####    #####   ###
                     ###
``````````````````````````````

और ये वाला:

                                       # # #    # # #   
                                       ##############
                                       ###  ####  ###
    #  #      #  #      #  #      #  # ###  ####  ### #  #      #  #      #  #      #  #
    ####      ####      ####      #### ############## ####      ####      ####      ####
    #### #  # #### #  # #### #  # #### ## ######## ## #### #  # #### #  # #### #  # ####
    ####################################################################################
    ######  ########  ########  ########  ########  ########  ########  ########  ######
    ###################################    ######    ###################################
    ###################################    ######    ###################################
                                       ##
                                         ##
                                           ##
                                             ##
                                               ##
````````````````````````````````````````````````````````````````````````````````````````````

और यह भी एक:

       ##########
   ####   #      ###
#######################
            #
              #
                #
                  #
                    #  # # #
                  #   #  ###
                   #   # ###
                # # #  #  ##
                # # ##   ###
                 #  #  #####
                   #   #####
                  # #  #####
                       #####
                       ## ##
                       #####
                       #####
                       ## ##
                       ## ##
````````````````````````````````````````````

चुनौती

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

नियम

  • इनपुट एक स्ट्रिंग के रूप में दिया गया है।
  • सभी वैध महल, एक सतह पर आराम ````````। (यदि इनपुट स्ट्रिंग में सतह नहीं है, तो महल अमान्य है।)
  • आप मान सकते हैं कि सभी इनपुट इन मानदंडों को पूरा करेंगे:
    • सतह हमेशा सपाट होगी।
    • सतह हमेशा महल की तरह कम से कम चौड़ी होगी, इसलिए जमीन के बाईं या दाईं ओर कोई ब्लॉक नहीं होगा।
    • इनपुट #सतह से नीचे कभी नहीं होगा ।
    • इनपुट में केवल इस चुनौती में दिए गए वर्ण होंगे। ( #, `अंतरिक्ष, या newline।)
    • आप मान सकते हैं कि इनपुट में हमेशा कम से कम एक वर्ण होगा।
  • ब्लॉक जुड़े हुए हैं यदि वे क्षैतिज या लंबवत हैं। विकर्ण की गिनती नहीं है!
    • जुड़े हुए:
      #	or	##
      #
    • जुड़े नहीं हैं:
      #      or	# #	or	 #
      #
      #
  • मान्य होने के लिए महल होना चाहिए। (दूसरे शब्दों में, बिना किसी इनपुट के, #मिथ्या मूल्य देना चाहिए।)
  • इनपुट में केवल इस चुनौती में दिए गए वर्ण होंगे। ( #, `अंतरिक्ष, या newline।)
  • आप मान सकते हैं कि इनपुट में हमेशा कम से कम एक वर्ण होगा।
  • मानक I / O और लूपोल नियम लागू होते हैं।

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

Falsy

  • ऊपर दिए गए सभी उदाहरण।
  • # # # # 
    #### ####
    #### # # ####
    ##############
    ###### ######
    ## ### #####
    (कोई जमीन नहीं।)
  • # 
    ### ####
    #### # # ####
    ##############
    ######
    ##### #### # ####
    `` `` `` `` `` `` `` ``
    (शीर्ष ब्लॉक क्षैतिज या लंबवत रूप से जुड़ा नहीं है।)
  •    
    `` `
    (कोई महल नहीं।)


  • # # # # # # #
    ##############
    ##### ## #####
    # # # # # # # # # ### # # #### # है। # # # # # # # # #
    #### #### #### #### ## #### ## #### #### ### ####
    ## ## # # #### # # #### # # #### # # #### # # #### # # #### # # ### # # # ####
    ################################################## ##################################
    ###### ######## ## ###### ####### ######## ######## ######## ###### #### ##
    ################################################। ############################
    ##################################################। ##############################
    `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` तो आपका भी यही हाल है। `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ``
    (सेंट्रल टॉवर बाकी महल से जुड़ा नहीं है क्योंकि इसमें कोई क्षैतिज या लंबवत आसन्न ब्लॉक नहीं हैं जो इसे जोड़ रहे हैं।)
  •    
    (कोई महल नहीं।)

  • (कोई महल नहीं, सिर्फ एक नया चरित्र।)
  • # # 
    #
    `` `` `` ``
    (दायां ब्लॉक क्षैतिज या लंबवत रूप से जुड़ा नहीं है।)
  •    
    `` `
    (कोई महल नहीं।)

Truthy

  • # 
    `
  • # # # # 
    #### ####
    #### # # ####
    ##############
    ###### ######
    ## ### #####
    `` `` `` `` `` `` `` ``
  •                       # 
    #
    # # # # ###
    #### #### # #
    #### # # #### ###
    ############## ###
    # ##### ###### ###
    ##### ##### ###
    ##### #### ###
    `` `` `` `` ` `` `` `` `` `` `` `` `` `` ``
  •                                        # # # # # # #    
    ##############
    ### #### ###
    # # # # # # # # # # # ######## # # # # # # # # #
    #### #### #### #### ############## #### ### #### ## ##
    #### # # #### # # #### # # #### ## ######## ## #### # # ### # # # # ## # # ####
    ########################################## ##########################################
    ## ###### ####### ######## ######## ######## ###### #### #### ######
    ################################# ##### # #################################
    ##################################################। ##############################
    `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` तो आपका भी यही हाल है। `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ``
  •                       #### ### 
    # #### ###
    # ###
    # ##
    #
    ###
    #####
    #######
    #########
    ### ## #####
    ##### ####
    ###### ######
    ###############
    # ### ########## #
    #############
    #############
    #############
    ###### ######
    ###### ######
    ############
    #############
    #############
    #############
    ###### ##### #
    ###### ######
    #############
    #############
    ########### ##
    #############
    ##### ######
    ###### ######
    ########## ##
    #############
    #############
    #############
    ######### ####
    ##### #####
    ##### #####
    ##### #####
    `` `` `` `` `` `` `` `` `` `` `
  •                                                 
    ####
    #####
    ######
    ####
    ####
    #####
    ########
    ##########
    ##########
    ###########
    ############
    ##############
    ##### ################
    ########### #################
    ###########################################
    ####### #################################
    ################# ####################
    ############################## ####
    ############################
    ################## #
    '`` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` आपको हमारे बारे में आपको बताएंगे। `

सौभाग्य!


क्या हम मान सकते हैं कि इनपुट की सभी पंक्तियाँ समान लंबाई (यानी रिक्त स्थान से भरी हुई) होंगी?
smls

@smls नहीं, आप यह नहीं मान सकते हैं कि इनपुट गद्देदार होगा।
user2428118

1
@smls # 1 और # 2: मैं वास्तव में निर्दिष्ट करने के लिए था कि प्रस्तुतियाँ को संभालना नहीं है, लेकिन अब मैं देख रहा हूं कि मैंने इसे कैसे लिखा नहीं है। चूंकि अभी तक कोई समाधान पोस्ट नहीं किया गया है जो इन चीजों को संभालता है, मैं प्रश्न को अपडेट कर दूंगा ताकि यह स्पष्ट हो जाए कि आपको इन्हें संभालना नहीं है। # 3 पुन: मैं वास्तव में ऐसी स्थिति के बारे में नहीं सोच सकता जहां कोड फाल्सी टेस्ट केस 2, 4 और 6 को सही ढंग से संभाल लेगा और फिर भी ऐसी स्थिति का पता लगाने में विफल होगा जहां जमीन से जुड़े सभी ब्लॉक नहीं हैं। # 4 पुन: मुझे यकीन नहीं है कि तुम क्या मतलब है। क्या यह पहले से ही ट्रू टेस्ट केस नंबर 1 द्वारा नियंत्रित नहीं किया गया है ?
user2428118


2
एक केले का महल? BEST CASTLE कभी
मैथ्यू रो

जवाबों:


11

घोंघे , 21 18 बाइट्स

अतिरिक्त इनपुट बाधाओं के कारण -3 बाइट्स चुनौती में संपादित किए गए।

!{t=\#!(\#o`+\`}\#

दुर्भाग्य से समय जटिलता तथ्यात्मक है, इसलिए अधिकांश इनपुट रन करने योग्य नहीं हैं।

झूठा मामलों के लिए आउटपुट 0, और सत्य मामलों के #लिए संख्या ।

                 ,,
!{ t             ,, Assert that nowhere in the grid,
    =\#          ,, there is a '#'
    !(           ,, such that there does not exist
        (\# o)+  ,, an orthogonally connected path of '#'
        \`       ,, ending at a '`'
    )            ,,
}                ,,
\#               ,, Match '#' at starting position

यह आपके द्वारा ज़गरब के उत्तर पर एक महल के रूप में पोस्ट किए गए उदाहरण को नहीं पहचानता है। मुझे नियमों में ऐसा कुछ भी नहीं दिखता जो कहता हो कि इन्हें महल के रूप में नहीं जाना चाहिए ? नियम केवल यह कहते हैं कि यह एक महल है यदि प्रत्येक #जमीन से जुड़ा हुआ है।
मार्टिन एंडर

@Zgarb नहीं, स्पष्टीकरण में एक बग है - +वास्तव में 1 या अधिक बार है, न कि 0. यह डिस्कनेक्ट किए गए महल की अनुमति के बाद वैसे भी अलग दिखने वाला है।
feersum

9

ऑक्टेव, 53 51 बाइट्स

@(s)([~,n]=bwlabel(s>32,4))|n==1&&nnz(diff(+s)==61)

यह ऑनलाइन की कोशिश करो!

* चूंकि ओप ने खाली इनपुट उत्तर के लिए जांच करने की आवश्यकता को मेरे पहले संपादन में वापस कर दिया।

स्पष्टीकरण:

nnz(s)                       check for empty input
([~,n]=bwlabel(s~=' ',4))    label nonempty regions and count number of labels

n==1                         check if number of labels is 1.

nnz(diff(+s)==61)            check if blocks connected to the surface

6

ग्रिम , 29 बाइट्स

C=\`|\#&<0C>oX
e`\#&C!v#!&\##

इसे ऑनलाइन आज़माएं! TIO पर अधिकांश परीक्षा के मामलों का समय समाप्त हो जाता है। इसे थोड़ा तेज़ करने के लिए इसके <0C>साथ बदलें <0CoF>

व्याख्या

मैं जाँच कर रहा हूँ कि हर जगह से #एक करने के लिए एक रास्ता मौजूद है `, और वहाँ कम से कम एक मौजूद है #। मैंने हाल ही में ग्रिम को रोटेशन कमांड्स जोड़े हैं, जो इस चुनौती को बहुत आसान बनाते हैं।

C=\`|\#&<0C>oX  First line:
C=               Define nonterminal C as
  \`             the literal `
    |            or
     \#          the literal #
       &<  >     which is contained in a larger rectangle
         0C      containing said literal adjacent to a match of C
            oX   rotated by any multiple of 90 degrees.
e`\#&C!v#!&\##  Second line:
e`               Match entire input against this pattern:
         !       does not
       v#        contain
  \#             the literal #
    &C!          which is not a match of C,
          &      and
             #   contains
           \#    the literal #.

6

जावास्क्रिप्ट (ईएस 6), 197 196 बाइट्स

f=(s,l=Math.max(...s.split`\n`.map(t=>t.length)),t=s.replace(/^.*/g,t=>t+' '.repeat(l-t.length)),u=t.replace(eval('/(#|`)([^]{'+l+'})?(?!\\1)[#`]/g'),'`$2`'))=>t==u?/#/.test(s)>/#/.test(t):f(s,l,u)

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है। #एक के पास एक को खोजने `और इसे करने के लिए इसे बदलकर एक समय में सभी एक को हटाने की कोशिश करता है `trueअगर कम से कम एक #मूल रूप से होता है तो रिटर्न देता है , लेकिन सभी को हटा दिया गया था। संस्करण जो 118 117 बाइट्स के लिए गद्देदार इनपुट की आवश्यकता है :

f=(s,t=s,u=t.replace(eval('/(#|`)([^]{'+s.search`\n`+'})?(?!\\1)[#`]/'),'`$2`'))=>t==u?/#/.test(s)>/#/.test(t):f(s,u)

5

पर्ल 6 , 180 बाइट्स

{?/\#/&&?all map ->\c{my \b=[map {[$^a.comb]},.lines];sub f(\y,\x){with b[y;x] ->$_ {b[y;x]=0;/\#/??f(y+(1|-1),x)|f(y,x+(1|-1))!!/\`/??1!!|()}}(|c)},map {|($++X ^$^a.comb)},.lines}

जाँचता है कि इनपुट में कम से कम एक है #, और यदि प्रत्येक #को एक पथ मिल सकता है `

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

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


5

पायथन 3 , 214 206 बाइट्स

def f(s):
 C=s.split('\n');n=max(map(len,C));o=[''];C=[*''.join(t.ljust(n)for t in C+o)]
 while C>o:o=C;C=['`'if z>' 'and'`'in{C[i+y]for y in(1,-1,n,-n)}else z for i,z in enumerate(C)]
 return'#'in{*s}-{*C}

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

यहाँ पहली पंक्ति सभी पंक्तियों को एक ही लंबाई में पैडिंग करने के लिए समर्पित है: हम स्ट्रिंग को विभाजित करते हैं ( s.split('\n')एक चार से छोटा है s.splitlines()), एक पंक्ति की अधिकतम लंबाई का पता लगाएं, और प्रत्येक को पैड करने के बाद सभी वर्णों की एक चपटा सूची असाइन करें। लाइन। (नई खबरें चली हैं।)

फिर हम एक सूची जहां प्रत्येक गैर अंतरिक्ष चरित्र कम से कम एक बैकटिक से सटे एक बैकटिक द्वारा बदल दिया है, और जारी रखने के लिए जब तक कोई परिवर्तन नहीं हुआ है (जब पुरानी सूची oके बराबर है C। हम साथ तुलना कर सकते हैं C>oबजाय C!=oक्योंकि जगह # (ASCII 35 ) के साथ `(ASCII 96) केवल सूची के शाब्दिक क्रम को बढ़ा सकता है।)

यदि कोई # अवशेष नहीं है, और कम से कम एक शुरू में मौजूद था, तो महल वैध है।

  • बजाय सेट अंतर में # के लिए जाँच आठ बाइट्स सहेजे गए '#'in s and'#'not in C
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.