কক্ষগুলিতে যোগদান করুন


15

সুতরাং, এখানে একটি মানচিত্র দেওয়া যাক, বলা যাক, একটি অন্ধকার ...

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

ধরা যাক যে নায়কটি কক্ষ A এ (উপরের বাম দিকে) এবং তাদের লক্ষ্য (সঙ্কটে রাজকুমার?) রুম বিতে (নীচে ডানদিকে) রয়েছে। আমাদের মানচিত্র হিরোকে তাদের লক্ষ্যে উন্নতি করতে দেয় না।

আমাদের একটি প্যাসেজওয়ে যুক্ত করা দরকার ...

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

সেখানে, আরও ভাল!


বিধি

  • একটি প্রোগ্রাম বা ফাংশন যা অন্ধকূপের মানচিত্র গ্রহণ করে (নতুন লাইনের অক্ষর দ্বারা পৃথক করা সারি সহ হ্যাশ এবং স্পেস দিয়ে তৈরি)।
  • এটি স্পেস অক্ষরের মধ্যবর্তী একটি সরাসরি পথে সমস্ত স্থানগুলিতে প্যাসেজ বোঝাতে যোগ করা বিন্দু সহ একটি মানচিত্র আউটপুট দেবে।
  • এটি লাইনের দৈর্ঘ্য বা রেখার সংখ্যা পরিবর্তন করবে না।
  • প্যাসেজগুলি সমস্তগুলি স্পেস থেকে স্পেস পর্যন্ত সরাসরি লাইনে থাকে।
    • প্যাসেজগুলি কোণে ঘুরতে পারে না
    • এগুলি স্থান এবং মানচিত্রের প্রান্তের মধ্যে হবে না।
  • যে কোনও ভাষা ব্যবহার করুন।
  • সবচেয়ে কম বাইটে রূপান্তর সম্পাদন করার চেষ্টা করুন।
  • যদি কোনও প্যাসেওয়েজগুলি আঁকানো না যায় তবে মানচিত্রটি অপরিবর্তিত রেখে দিন।
  • মানচিত্রের সর্বদা সব প্রান্তের চারপাশে হ্যাশ থাকা উচিত (আপনাকে প্রান্তে ফাঁকা স্থানগুলি হ্যান্ডেল করার দরকার নেই)।
  • ইনপুট মানচিত্রগুলি সর্বদা আয়তক্ষেত্রাকার থাকে, প্রতিটি সারি একই প্রস্থের হওয়া উচিত।

পরীক্ষার মামলা

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

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

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

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

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

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

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

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

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

আমি চেয়ে ভিন্ন অক্ষর ব্যবহার করতে পারি #এবং .?
ব্যবহারকারী 202729

1
@ ব্যবহারকারী 202729 নাহ। এটি প্রথম থেকেই নিয়মের মধ্যে ছিল এবং এটির একটি উত্তর ইতিমধ্যে ছিল। সম্ভবত উত্তরগুলি সামঞ্জস্য রেখে ভাল।
এজেফারাডে

@ ব্যবহারকারী202729 আপনি প্রস্তাবিত পরীক্ষার কেসটি আমার পেনাল্টিমেট মামলার অনুরূপ। আমি পরের প্রশ্নটি পরিবর্তন করার সময় এটি যুক্ত করতে পারি, তবে এটি বেশি যোগ করে না।
এজেফারাডে

... আমি নিচে স্ক্রোল করি নি। সমস্যা নেই.
ব্যবহারকারী 202729

@ l4m2 একই নিয়ম প্রযোজ্য, যেখানেই কক্ষগুলির মধ্যে একটি সরল রেখা আছে, এটি একটি উত্তরণ। সুতরাং একটি U- আকারের ঘরে প্যাসেজগুলি পূরণ করে ফাঁক দেওয়া হবে।
এজেফারাডে

উত্তর:


7

জেলি , 17 বাইট

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

এটি অনলাইন চেষ্টা করুন!

কৌশল -1 ব্যবহারকারী 202729 ধন্যবাদ ।

ব্যাখ্যা:

ỴḲ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
লোকেরা কীভাবে এই চ্যালেঞ্জগুলি, এবং খুব কম চরিত্রের মধ্যে খুব দ্রুত পূরণ করতে পারে তা আমাকে সর্বদা অবাক করে দেয়।
এজেফারাডে

@ এজেফারাডে ঠিক আছে, তাহলে আপনিও এর একটি অংশ হতে পারেন। :) কেবল স্ট্যাক-ভিত্তিক গল্ফিং ভাষাগুলি (উদাঃ সিজেএম, 05 এবি 1 ই) দিয়ে শুরু করুন এবং সেখান থেকে আপনার পথে কাজ করুন।
এরিক আউটগল্ফার

সত্যি কথা বলতে আমার কাছে অনেক দূরে মনে হয়, তবে প্রক্রিয়াটি কীভাবে কাজ করে তা দেখতে আমি পছন্দ করি।
এজেফারাডে

7
অপেক্ষা করুন, 'চা এবং বিস্কুট' এর জন্য কি টিএনবি সংক্ষিপ্ত? নাকি আমি এখনই সুপার ব্রিটিশ হচ্ছি?
এজেফারাডে

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
ভারী শুল্ক @ ব্যবহারকারী 576656 গল্ফ করার জন্য ধন্যবাদ! অসম্পূর্ণ আমার কাছে 2 টি ফাংশন ছিল এবং পুরোটিকে অপটিমাইজ না করে কেবল তাদের একসাথে আটকানো হয়েছে। এটা মনে রাখা ভাল জিনিস।
এওমিকা


2

রেটিনা 0.8.2 , 95 বাইট

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

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা:

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

এটি #লক্ষণগুলি সন্ধান করে যা শূন্যস্থান বা .s এর উপরে এবং এগুলিকে বিন্দুতে পরিণত করে যতক্ষণ না বাকি থাকে। লুকবাইন্ডটি #'র কলামটি সন্ধান করবে এবং তারপরে তাকাতে পরের লাইনে এবং পরমাণুগতভাবে নীচের একই কলামে যায় যাতে স্থান বা .ঠিক এটি নীচের নীচে থাকলেই মিলতে পারে #

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

এটি এর জন্য অনুসন্ধান করে .যা শূন্যস্থান বা .গুলি এর নীচে নয় এবং এগুলিকে আবার সেশনে পরিণত করে #যতক্ষণ না বাকি থাকে। Lookahead খুঁজে বের করে .এর কলাম এবং তারপর উপরে পূর্ববর্তী লাইন lookbehind অগ্রাহ্য করা হবে ও atomically একই কলামে একই ভাবে, যাতে স্থান বা .শুধুমাত্র মেলাতে পারে যদি এটি ঠিক উপরে রয়েছে #। একটি নেতিবাচক লুকবিহাইড ব্যবহার করা হয়েছে যাতে .এটি শীর্ষ সারিতে s এর জন্যও কাজ করে ।

 (\S+) 
 $.1$*. 

(উভয় লাইনে স্থান পেছনের নোটটি নোট করুন) এটি কেবল ফাঁকা জায়গার মধ্যে অ-হোয়াইটস্পেস অক্ষরের সমস্ত রান অনুসন্ধান করে এবং নিশ্চিত করে যে সেগুলি সমস্ত .s


1

রুবি , 104 বাইট

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

এটি অনলাইন চেষ্টা করুন!

ঠিক আছে, এটি দুর্দান্ত নয়, তবে কমপক্ষে এটি সংশ্লেষিত। আমি নিশ্চিত এটির উন্নতি হতে পারে।


1

আমি ভয় করি যে আপনার ডিবাগ লিঙ্কটি ফাঁকা কোড দেখায়।
এজেফারাডে

@ এজেফারাডে: আপনি কোন ব্রাউজারটি ব্যবহার করছেন? এটি আমার জন্য উইন্ডোজের জন্য ক্রোমে কাজ করছে।
পুনরাবৃত্তি

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 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`
`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.