ASCII Labirent İşleme 3000


42

Yazmayı sevmiyorum, bu yüzden labirentlerimi çok basit bir biçimde çiziyorum:

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

Bir labirent değil mi? Tabii ki, tüm labirentlerin 3 boyutlu görünmesi gerektiğini düşünüyorum, benzer ama bu labirent azınlığı için bu zorlukla aynı değil.

+-----+     +-----------------------------+
|\     \    |\                             \
+ \     \   + \                             \
 \ \     \   \ +-----------------------+     \
  \ \     \   \|                       |\     \
   \ \     \   +-----------------------+ \     \
    \ \     \     +-----------------+   \ \     \
     \ \     \    |\                 \   \ \     \
      \ \     \   + \                 \   \ \     \
       \ \     \   \ \     +-----+     \   \ \     \
        \ \     \   \ \     \    |\     \   \ \     \
         \ \     \   \ \     \---+ \     \   \ \     \
          \ \     \   \ +-----+   \ \     \   \ \     \
           \ \     \   \|     |    \ \     \   \ \     \
            \ \     \   +-----+     \ \     \   \ \     \
             \ \     +-----------------+     \   \ \     \
              \ \                             \   \ \     \
               \ \                             \   \ \     \
                \ +-----------------------------+   \ +-----+
                 \|                             |    \|     |
                  +-----------------------------+     +-----+

Ne yazık ki, bu formatta labirentlerle çalışmak zordur ve tüm bu manuel yazımlardan sonra, sadece orijinali tekrar yazmak istemiyorum, bu yüzden benim için tersine çevirmek için bir program yazmanıza ihtiyacım var.

kurallar

  • Girdi sadece oluşan satırlı dize veya karakter matris olacak " ", "|", "\", "+", "-", ve yenisatırlar.
  • Çıkış oluşur " "ve "#"labirent tarafından tarif edilen desen,.
  • İnanılmaz labirent tasarım becerilerim nedeniyle, labirentin yapısı hakkında hiçbir şey üstlenemezsiniz, bunun dışında geçerli bir yapısızlaştırma vardır.
  • 3d-ification'ta, (şimdi geri almanız gereken işlem), her biri #bu 3x4x7 karakter bloğuna dönüştürüldü:
    +-----+
    |\     \
    + \     \
     \ +-----+
      \|     |
       +-----+
    
  • Bitişik bloklar bir araya getirildi, şöyle:
    +-----+-----+
    |\     \     \
    + \     \     \
     \ +-----+-----+
      \|\     \     \
       + \     \     \
        \ +-----+-----+
         \|     |     |
          +-----+-----+
    
    ama çizgileri birleştirmeden, aslında şöyle görünür:
    +-----------+
    |\           \
    + \           \
     \ \           \
      \ \           \
       \ \           \
        \ +-----------+
         \|           |
          +-----------+
    
  • İçbükey boşluklar bazen diğer duvarların parçalarını engeller.
    +-----------+
    |\           \
    + \           \
     \ \     +-----+
      \ \     \    |
       \ \     \---+
        \ +-----+
         \|     |
          +-----+
    
  • Girişteki veya çıktısındaki boşluk beyazı kabul edilebilir. (Cevabınız belirtmelisiniz gerektirir girişteki sonlarındaki boşluk.)
  • Önde gelen boşluk, girişteki boş alanlara karşılık gelmelidir.
  • Hala yazmayı sevmiyorum, bu yüzden en kısa kod kazanıyor

Test durumları:

Input:
+-----+     +-----------------------------+
|\     \    |\                             \
+ \     \   + \                             \
 \ \     \   \ +-----------------------+     \
  \ \     \   \|                       |\     \
   \ \     \   +-----------------------+ \     \
    \ \     \     +-----------------+   \ \     \
     \ \     \    |\                 \   \ \     \
      \ \     \   + \                 \   \ \     \
       \ \     \   \ \     +-----+     \   \ \     \
        \ \     \   \ \     \    |\     \   \ \     \
         \ \     \   \ \     \---+ \     \   \ \     \
          \ \     \   \ +-----+   \ \     \   \ \     \
           \ \     \   \|     |    \ \     \   \ \     \
            \ \     \   +-----+     \ \     \   \ \     \
             \ \     +-----------------+     \   \ \     \
              \ \                             \   \ \     \
               \ \                             \   \ \     \
                \ +-----------------------------+   \ +-----+
                 \|                             |    \|     |
                  +-----------------------------+     +-----+

Output:
# #####
#     #
# ### #
# # # #
#   # #
##### #

Input:
+-----+
|\     \
+ \     \
 \ +-----+
  \|     |
   +-----+

Output:
#

Input:
      +-----------------+
      |\                 \
      + \                 \
   +-----+     +-----+     +-----+
   |\           \    |\           \
   + \           \---+ \           \
    \ \     +-----+   \ +-----+     \
     \ \     \    |    \|     |\     \
      \ \     \---+     +-----+ \     \
       \ \     +-----+     +-----+     \
        \ \           \    |\           \
         \ \           \   + \           \
          \ +-----+     +-----+     +-----+
           \|     |\                 \    |
            +-----+ \                 \---+
                   \ +-----------------+
                    \|                 |
                     +-----------------+

Output:
 ###
## ##
#   #
## ##
 ###

Input:
+-----------------------------------------------------------------------------------------------------+
|\                                                                                                     \
+ \                                                                                                     \
 \ +-----------------------------------------------+     +-----------------------------------------+     \
  \|                                               |\     \                                        |\     \
   +-----------------------------------------------+ \     \---------------------------------------+ \     \
      +-----+     +-----------------------------+   \ \     \     +-----------------------------+   \ \     \
      |\     \    |\                             \   \ \     \    |\                             \   \ \     \
      + \     \   + \                             \   \ \     \   + \                             \   \ \     \
       \ \     \   \ +-----------+     +-----+     \   \ \     \   \ +-----------------------+     \   \ \     \
        \ \     \   \|           |\     \    |\     \   \ \     \   \|                       |\     \   \ \     \
         \ \     \   +-----------+ \     \---+ \     \   \ \     \   +-----------------------+ \     \   \ \     \
          \ \     \     +-----+   \ \     \   \ \     \   \ \     +-----------------------+   \ \     \   \ \     \
           \ \     \    |\     \   \ \     \   \ \     \   \ \                             \   \ \     \   \ \     \
            \ \     \   + \     \   \ \     \   \ \     \   \ \                             \   \ \     \   \ \     \
             \ \     \   \ +-----+   \ \     \   \ \     \   \ +-----------------------------+   \ \     \   \ \     \
              \ \     \   \|     |    \ \     \   \ \     \   \|                             |    \ \     \   \ \     \
               \ \     \   +-----+     \ \     \   \ \     \   +-----------------------------+     \ \     \   \ \     \
                \ \     +-----------+   \ \     \   \ \     +-----------------------------------+   \ \     \   \ \     \
                 \ \                 \   \ \     \   \ \                                         \   \ \     \   \ \     \
                  \ \                 \   \ \     \   \ \                                         \   \ \     \   \ \     \
                   \ \     +-----------+   \ \     \   \ \     +-----------------------+     +-----+   \ \     \   \ \     \
                    \ \     \          |    \ \     \   \ \     \                      |\     \    |    \ \     \   \ \     \
                     \ \     \---------+     \ \     \   \ \     \---------------------+ \     \---+     \ \     \   \ \     \
                      \ \     \     +-----------+     \   \ \     \     +-----------+   \ \     \     +-----+     \   \ +-----+
                       \ \     \    |\                 \   \ \     \    |\           \   \ \     \    |\           \   \|     | 
                        \ \     \   + \                 \   \ \     \   + \           \   \ \     \   + \           \   +-----+  
                         \ \     \   \ +-----------------+   \ \     \   \ \           \   \ +-----+   \ +-----+     \            
                          \ \     \   \|                 |    \ \     \   \ \           \   \|     |    \|     |\     \            
                           \ \     \   +-----------------+     \ \     \   \ \           \   +-----+     +-----+ \     \            
                            \ \     +-----------------------------+     +-----+           +-----------------------+     +-----------+
                             \ \                                                                                                     \
                              \ \                                                                                                     \
                               \ +-----------------------------------------------------------------------------------------------------+
                                \|                                                                                                     | 
                                 +-----------------------------------------------------------------------------------------------------+  

Output:
#################
        #       #
# ##### # ##### #
#   # # #     # #
# # # # ##### # #
#   # #       # # 
### # ####### # #
#   # #    #  # # 
# ### # ## # ##
#     # ##    #  
#################

Input:
+-----------------+
|\                 \
+ \                 \
 \ \                 \
  \ \                 \
   \ \                 \
    \ \                 \
     \ \                 \
      \ \                 \
       \ +-----------------+
        \|                 | 
         +-----------------+

Output:
###
###
###

Input: (Note leading whitespace)
      +-----+     +-----+
      |\     \    |\     \
      + \     \   + \     \
   +-----+-----+-----+-----+
   |\     \    |\     \    | 
   + \     \---+ \     \---+  
    \ +-----+-----+-----+-----+
     \|     |\     \    |\     \
      +-----+ \     \---+ \     \
         +-----+-----+-----+-----+
         |\     \    |\     \    | 
         + \     \---+ \     \---+  
          \ +-----+   \ +-----+      
           \|     |    \|     |       
            +-----+     +-----+        

Output:
 # #
# #
 # #
# #


Girdi / çıktı dizelerin bir listesi olabilir mi?
Nick Kennedy,

@Hayır evet. Karakter matrisi ile kastettiğim budur.
Hiatsu

harika sadece açıklığa kavuşturmak istedim!
Nick Kennedy,

1
Bu meydan okumayı gerçekten seviyorum! Sadece merak ediyorum, neden bu tarafa geçip 3d labirent üretmiyor?
AJFaraday

@AJFaraday Labirent (ve daha pek çok) üretmek, bağladığım mücadelede zaten yapıldı.
Hiatsu

Yanıtlar:


30

Python 2 , 81 bayt

def f(M,k=1,r='',b=0):
 for c in M[k][k::6]:b^=c>' ';r+=' #'[b]
 print r;f(M,k+3)

Çevrimiçi deneyin!

Girdiyi bir dizge listesi (veya karakter listesi) olarak alır. Hata ile sonlanan çıktıyı yazdırır.

Bu fikir tsh’lara benzer . ?Hangileri ve hangileri olduğunu görmek için aşağıdaki gibi işaretlenmiş karakterlere bakarız \:

+-----------+
|?     ?     ?
+ \           \
 \ \     +-----+
  \ ?     ?    |?
   \ \     \---+
    \ +-----+
     \|?    |?
      +-----+

Her satırın içinde ?, \dolu bir hücre ile labirentin boş bir hücresi arasında dikey bir sırtı işaretler. Bu sırtlar labirentin en üst katında olduğundan, \karakterleri asla başka bir labirent öğesi tarafından gizlenmez.

?Konumlara bakmak için kod satırlar arasında k=1,4,7,...(sıfır dizinli) yinelenir ve her satırda konumdan başlayarak her 6. konuma bakar k. Bitte boş ya da dolu bir hücrede olup olmadığımızı izler bve ne zaman \karşılaşıldığında biti çevirir . Her karakter okunduktan sonra, boş ( ) veya full ( #) karakterine göre ekler bve satır tamamlandıktan sonra elde edilen dizgeyi yazdırır.


Yani. Dır-dir. ETKİLEYİCİ.
connect your your şarj

19

JavaScript (Node.js) , 85 bayt

a=>a.flatMap(u=(l,y)=>y%3?[]:[l.flatMap((c,x)=>x<y|(x-=y+3)%6?[]:' #'[u[x]^=c+1<0])])

Çevrimiçi deneyin!

Temel fikir şudur: Yalnızca üzerindeki karakterleri önemsiyoruz . Bir tire ( ) ise, geçerli hücre üstündeki değerle farklı değere sahiptir ve bir boşluk ( ) ise, geçerli hücre aynı değere sahiptir.(6x+3y+3,3y)-

Teşekkürler @ Arnauld , 7 bayt kurtardı


çok güzel bir fikir
Jonah

5

Jöle , 22 20 bayt

ṫ"J‘$m3n⁶m€6Ż^\ị⁾# Ḋ

Çevrimiçi deneyin!

Bir Jelly ipini girdi olarak alan ve işlenen labirenti bir sıra beyaz boşluk içeren bir Jelly ipi olarak geri döndüren monadik bir bağlantı.

Tek bir satır aralığı boşluk olması kabul edilebilirse 1 bayt kaydedilebilir.

@ Tsh'ın formülünden biraz ilham aldı , bu yüzden de onu yeneceğinizden emin olun!

açıklama

ṫ"  $                | Tail each string using a paired member of the following:
  J                  | - Sequence along the list of strings
   ‘                 | - Incremented by 1
     m3              | Take every 3rd string (1st, 4th, 7th, ...)
       n⁶            | Not equal to space character
         m€6         | Within each list take every 6th item (1st, 7th, ...)
            Ż        | Prepend a zero to the list
             ^\      | Reduce using xor, collecting up results; vectorised across lists (so starts with 0 xor first list, then output of that xor second list, and so on)
               ị⁾#   | Index into "#", " "
                   Ḋ | Remove first list

5

05AB1E , 25 22 bayt

Kevin Cruijssen sayesinde -1 bayt

εN3%iN.$6ιнηðÊO„ #sèJ,

Çevrimiçi deneyin!

Xnor'ın Python limanı . Bir karakter matrisi olarak girdi alır. TIO bağlantısı, girişi |€Skarakter matrisi formatına dönüştüren okunabilirlik için çok satırlı bir dize olarak girişi gösterir .


1
24 bayt : ε'\¢„ #sè}içinðм€g„ #sè
Kevin Cruijssen

Vay, güzel bul! Daha fazla iyileştirme için cevaba bakınız. Not: мve arasındaki fark konusunda kafam karıştı K.
Grimmy

3

Retina 0.8.2 , 72 bayt

¶(?<=(.|(¶))+)(?<-2>.)+
¶
-4G`
.+¶(.+)¶.+
$1
T` `#`\\  +\\
.(.)....|.
$1

Çevrimiçi deneyin! Açıklama:

¶(?<=(.|(¶))+)(?<-2>.)+
¶

Tüm çizgileri eğriltin.

-4G`

İhtiyacım olmadığı için son üç satırı silin.

.+¶(.+)¶.+
$1

Her üç satır grubunun sadece ortasını tutun. (Retina 1 'de, yukarıda iki aşamada tek bir aşamada yapılabilir inanıyoruz: ,G1,3,-5`.)

T` `#`\\  +\\

Blokların yüzlerini doldurun.

.(.)....|.
$1

Her bloğun sadece ikinci karakterini tut.


2

C (clang) , 120 117 bayt

o,c,t,s,r;f(char*m){for(s=o=0;*m;!r?t^=*m!=32,s=t?35:46:0)*++m==10?m-=~++o,c=t=0,s=10:0,r||printf(&s),r=c++%6|o%3-1;}

Çevrimiçi deneyin!

Diğerlerinden ilham alan cevaplar.

'\'=92   ' '=32=>46='.'  '#'=35   '\n'=10 
// o offset == // l line 
// c line counter 
// t toggle 
// r => ? test, point to inspect 
for(o=s=0;*m;
!r?t=*m-32?!t:t,s=t?35:46:0) // t^=*m!=32 @ceilingcat 
// if test(r) is enabled: toggle(t) and sets (s)

*++m==10?m-=~++o,c=t=0,s=10:0,
// next char => if it's \n overwrites (s)
// and increments offset(o) and move pointer(m)

r || printf (&s)
// r or print! Thanks to @ceilingcat
// instead of 
    *++m-10?0:(m-=~++o,c=t=0,s=10),
    !r*s?putchar(s):0, 
 Saved 5 !

r=c++%6|o%3-1;// enable test every 6 x 3+1 positions
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.