कमरों में शामिल हों


15

तो, यहाँ एक नक्शा है, चलो कहते हैं, एक तहखाने ...

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

मान लीजिए कि नायक कक्ष ए (ऊपर बाईं ओर) और उनके लक्ष्य (संकट में राजकुमार?) कक्ष बी (नीचे दाईं ओर) में है। हमारा नक्शा नायक को उनके लक्ष्य की प्रगति की अनुमति नहीं देता है।

हम एक मार्ग को जोड़ने की जरूरत है ...

##########
#    #####
#    #####
####.#####
####.#####
####.#####
####.#####
####    ##
####    ##
##########

वहाँ, बहुत बेहतर!


नियम

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

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

####       ####
#  #   =>  #  #
#  #       #  #
####       ####

##########        ##########
#    #####        #    #####
#    #####        #    #####
##########        ####.#####
##########    =>  ####.#####
##########        ####.##### 
##########        ####.#####
####    ##        ####    ##
####    ##        ####    ##
##########        ##########

##########        ##########
#    #####        #    #####
#    #####        #    #####
##########        ##########
##########    =>  ##########
##########        ########## 
##########        ##########
######  ##        ######  ##
######  ##        ######  ##
##########        ##########

##########        ##########
#    #####        #    #####
#    #####        #    #####
##########        ####.#####
##########    =>  ####.#####
####   ###        ####   ### 
##########        ######.###
######  ##        ######  ##
######  ##        ######  ##
##########        ##########

##########        ##########
#    #####        #    #####
#    #####        #    #####
##########        ##..######
##########    =>  ##..######
##########        ##..###### 
##########        ##..######
## #######        ## .######
##  ######        ##  ######
##########        ##########

##########        ##########
#    #####        #    #####
#    #####        #    #####
##########        #.########
##########    =>  #.########
##########        #.######## 
#######  #        #.#####  #
#######  #        #.#####  #
# #####  #        # .....  #
##########        ##########

##########        ##########
#    #####        #    #####
#    #####        #    #####
##########        #.########
#####  ###    =>  #.###  ###
#####  ###        #.###  ### 
#######  #        #.#####  #
#######  #        #.#####  #
# #####  #        # .....  #
##########        ##########

##########        ##########
##       #        ##       #
##########        ##......##
##########        ##......##
##########    =>  ##......##
##########        ##......## 
##########        ##......##
##########        ##......##
#       ##        #       ##
##########        ##########

##########        ##########
####  ####        ####  ####
####### ##        ####..# ##
###### ###        ####.. ###
# ### ## #    =>  # ... .. #
# ## ### #        # .. ... # 
### ######        ### ..####
## #######        ## #..####
####  ####        ####  ####
##########        ##########

क्या मैं #और से भिन्न वर्णों का उपयोग कर सकता हूं .?
user202729

1
@ user202729 नहींं। यह शुरू से ही नियमों में था, और इसके साथ पहले से ही एक जवाब था। रेक्स को लगातार छोड़ने के लिए संभवतः सबसे अच्छा है।
AJFaraday

@ user202729 आपके द्वारा सुझाया गया टेस्ट केस मेरे पेनल्टी केस जैसा है। जब मैं अगली बार प्रश्न बदलूं, तो मैं इसे जोड़ सकता हूं, लेकिन यह बहुत कुछ नहीं जोड़ता है।
AJFaraday

... मैंने अभी नीचे स्क्रॉल नहीं किया है। कोई दिक्कत नहीं है।
user202729

@ l4m2 समान नियम लागू होते हैं, जहाँ भी कमरों के बीच एक सीधी रेखा होती है, यह एक मार्ग है। तो यू-आकार वाले कमरे में मार्ग भरा होगा।
AJFaraday

जवाबों:


7

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

ỴḲaLḊṖƊ¦”.KƊ€Z$⁺Y

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

ट्रिकी -1 user202729 के लिए धन्यवाद ।

स्पष्टीकरण:

ỴḲaLḊṖƊ¦”.KƊ€Z$⁺Y Arguments: S
Ỵ                 Split S on newlines
 ḲaLḊṖƊ¦”.KƊ€Z$   Monadic link
 ḲaLḊṖƊ¦”.KƊ€      Map over left argument
 ḲaLḊṖƊ¦”.KƊ        Monadic link
 Ḳ                   Split on spaces
  aLḊṖƊ¦”.           Dyadic link with right argument '.'
  aLḊṖƊ¦              Apply at specific indices
  a                    Logical AND (vectorizes)
   LḊṖƊ                Monadic link
   L                    Length
    Ḋ                   Range [2..n]
     Ṗ                  Remove last element
          K          Join with spaces
             Z     Zip
               ⁺  Previous link
                Y Join with newlines

2
यह हमेशा मुझे आश्चर्यचकित करता है कि लोग कितनी जल्दी इन चुनौतियों का सामना कर सकते हैं, और इतने कम पात्रों में।
AJFaraday

@AJFaraday खैर, फिर आप भी इसका हिस्सा बन सकते हैं। :) बस स्टैक-आधारित गोल्फिंग भाषाओं के साथ शुरू करें (जैसे CJam, 05AB1E) और वहां से अपना काम करें।
आउटगॉल्फ

यह मेरे से परे एक लंबा रास्ता तय करता है, ईमानदार होने के लिए, लेकिन मैं यह देखकर प्यार करता हूं कि प्रक्रिया कैसे काम करती है।
AJFaraday

7
रुको, क्या टीएनबी 'चाय और बिस्कुट' के लिए कम है? या मैं अभी सुपर-ब्रिटिश हूं?
AJFaraday

5
एक स्पष्टीकरण इस उत्तर के लिए अच्छा होगा।
तमसेन सेंगेल


3

एपीएल + विन, 87 बाइट्स

चरित्र मैट्रिक्स के लिए संकेत:

n←(' '=m←⎕)⋄c←(∨⍀n)+⊖∨⍀⊖n⋄r←(∨\n)+⌽∨\⌽n⋄((,c>1)/,m)←'.'⋄((,r>1)/,m)←'.'⋄((,n)/,m)←' '⋄m

3

हास्केल , 209 165 162 बाइट्स।

import Data.List
t=transpose
k=concat
j a=(foldr1 max<$>)<$>t<$>t[a,f<$>a,t$f<$>t a]
f b|(e:g:d@(h:_:_))<-group b=k[f$e++g,'.'<$h,drop(length h)$f$k d]|1>0=' '<$b

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

हास्केल मुझे यकीन है कि यह करने का सबसे कुशल तरीका नहीं है। यह मेरी पसंद के लिए बहुत सारे कोष्ठक है, लेकिन मुझे यकीन नहीं है कि किसी और को कैसे हटाया जाए।


2
साइट पर आपका स्वागत है! आप उपयोग करके $( (k(take 2 c))बन जाता है (k$take 2 c)) कुछ कोष्ठकों को कम कर सकते हैं । आप कुछ मामलों में !!0इसके बजाय उपयोग कर सकते हैं head
पोस्ट रॉक गार्फ हंटर

वास्तव में आप के विशेष मामले में (k(take 2 c))सिर्फ बाहरी कोष्ठकों को हटा सकते हैं, उनकी जरूरत नहीं है। लेकिन आप के मामले में drop(length(head d))अभी भी $, drop(length$head d)(और यहां तक ​​कि drop(length$d!!0)) के साथ का उपयोग कर सकते हैं ।
पोस्ट रॉक गार्फ हंटर

इसके अलावा अगर आप kइसके बजाय उपयोग करते हैं ++तो अंतिम पंक्ति को बहुत कम कर सकते हैं। k[' '<$k(take 2 c),'.'<$d!!0,drop(length$d!!0)$f$k$d]
पोस्ट रॉक गार्फ हंटर

एक आखिरी गोल्फ, आखिरी लाइन को बदल दिया जा सकता है f b|(e:g:d@(h:_:_))<-group b=k[' '<$e++g,'.'<$h,drop(length h)$f$k d]|1>0=' '<$b, यह बहुत भारी उठाने के लिए एक पैटर्न मैच का उपयोग करता है जो पहले किया जा रहा था।
पोस्ट रॉक गार्फ हंटर

1
हैवी ड्यूटी गोल्फिंग के लिए धन्यवाद @ user56656! Ungolfed मैं 2 कार्यों के रूप में च गया था और सिर्फ उन्हें एक पूरे के रूप में अनुकूलित किए बिना उन्हें एक साथ चिपकाया था। जिसे ध्यान में रखना अच्छी बात है।
एनोइमिका


2

रेटिना 0.8.2 , 95 बाइट्स

+`(?<=(.)*)#(?=.*¶(?>(?<-1>.)*)[ .])
.
+`\.(?=(.)*)(?<![ .](?>(?<-1>.)*)¶.*)
#
 (\S+) 
 $.1$*. 

इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

+`(?<=(.)*)#(?=.*¶(?>(?<-1>.)*)[ .])
.

यह उन #संकेतों की तलाश करता है जो रिक्त स्थान या .एस से ऊपर हैं और उन्हें डॉट्स में बदल देते हैं जब तक कि कोई भी नहीं बचा हो। लुकबाइंड के #कॉलम को ढूंढता है और फिर लुकहेड अगली पंक्ति में जाता है और एटोमिक रूप से नीचे उसी कॉलम में जाता है ताकि स्पेस या .मैच तभी हो सके जब वह बिल्कुल नीचे हो #

+`\.(?=(.)*)(?<![ .](?>(?<-1>.)*)¶.*)
#

यह .एस के लिए लग रहा है कि रिक्त स्थान या .एस से नीचे नहीं हैं और उन्हें वापस #एस में बदल देता है जब तक कि कोई भी शेष न हो। .लुकहेड के स्तंभ को ढूँढता है और फिर पिछली पंक्ति में तिरछी नज़र रखता है और एटोमिक रूप से ऊपर एक ही कॉलम में एक ही तरह से होता है ताकि अंतरिक्ष या .केवल मेल खा सके अगर यह बिल्कुल ऊपर है #। एक नकारात्मक लुकअप का उपयोग किया जाता है ताकि यह .शीर्ष पंक्ति में s के लिए भी काम करे ।

 (\S+) 
 $.1$*. 

(दोनों रेखाओं पर ध्यान देने योग्य स्थान पर ध्यान दें) यह बस रिक्त स्थान के बीच गैर-व्हाट्सएप पात्रों के सभी रनों की तलाश करता है और यह सुनिश्चित करता है कि वे सभी .एस हैं।


1

रूबी , 104 बाइट्स

->s{2.times{s=((0...s=~/\n/).map{|i|s.lines.map{|b|b[i]}*""}*"\n").gsub(/ [#.]+(?= )/){$&.tr(?#,?.)}};s}

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

खैर, यह बहुत अच्छा नहीं है, लेकिन कम से कम यह जटिल है। मुझे यकीन है कि इसमें सुधार किया जा सकता है।


1

मुझे डर है कि आपका डिबग लिंक रिक्त कोड दिखाता है।
AJFaraday

@AJFaraday: आप किस ब्राउज़र का उपयोग कर रहे हैं? यह विंडोज के लिए क्रोम पर मेरे लिए काम कर रहा है।
पुनरावर्ती

1

जावास्क्रिप्ट (Node.js) , 205 193 190 186 181 175 172 बाइट्स

r=>r.split`
`.map(x=>[...x]).map((R,y,r)=>R.map((c,x)=>{for(D=2;c<"#"&&D--;){for(;(T=(r[y+=D]||0)[x+=!D])>" ";);for(;r[y-=D][x-=!D]>c;)T?r[y][x]=".":0}})&&R.join``).join`
`

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

टिप्पणी की गई

f=r=>r.split`
` ->                                     //getting as string with lines
.map(x=>[...x])                          //to 2d string array
  .map((R,y,r)=>                         //r - the new 2d string array
    R.map((c,x)=>{                       //
      for(D=2;c<"#"&&D--;)              //instead of using if joining c==" " with the loop,D=1/0
        {for(;                           //
         (T=(r[y+=D]||0)[x+=!D])>" ";);  //0[num] = undefined. checking for a path - consisting of # or .(or not consisting of space or undefined), we dont need temp (X,Y) because in the next loop we will return to our original position regardless of the correctness of the path
           for(;T&&r[y-=D][x-=!D]>c;)    //again instead of if(T) combine with loop. if T is not undefined it will be a space because the array can return .#(space). and we then go back to the source(x,y)
                                         //remeber that c==" "
             r[y][x]="."                 //and just putting . where weve been
     }})&&R.join``                       //instead of return r as string at the end , we know that we cant change a row at a smaller index(due to D-0/1) so we can return R.join`` already
    ).join`
`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.