ASCII Maze Rendering 3000

42

Ich schreibe nicht gerne, deshalb zeichne ich meine Labyrinthe in einem sehr einfachen Format:

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

Ist es nicht a- Labyrinth -ing? Natürlich, ich glaube , alle Labyrinthe aussehen 3d sollen, ähnlich , aber nicht , dass er gleich wie diese Herausforderung , für eine maximalen a- Labyrinth -ingness, so dass ich (zähneknirschend) manuell durch das Labyrinth zu sehen wie folgt aktualisiert:

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

Leider ist es schwierig, mit Labyrinthen in diesem Format zu arbeiten, und nach all dem manuellen Tippen möchte ich nicht nur das Original neu tippen, sondern Sie müssen ein Programm schreiben, um die Umkehrung für mich vorzunehmen.

Regeln

  • Eingang wird ein mehrzeiliges String oder Zeichenmatrix nur aus sein " ", "|", "\", "+", "-", und Zeilenumbrüche.
  • Die Ausgabe besteht aus " "und "#"in dem vom Labyrinth beschriebenen Muster.
  • Aufgrund meiner erstaunlichen Fähigkeiten beim Entwerfen von Labyrinthen kann man nichts über die Struktur des Labyrinths annehmen, außer dass es eine gültige Dekonstruktion hat.
  • In der 3D-Anpassung (der Vorgang, den Sie jetzt rückgängig machen müssen) wurde jeder #in diesen 3x4x7-Zeichenblock konvertiert:
    +-----+
    |\     \
    + \     \
     \ +-----+
      \|     |
       +-----+
    
  • Benachbarte Blöcke wurden wie folgt zusammengefügt:
    +-----+-----+
    |\     \     \
    + \     \     \
     \ +-----+-----+
      \|\     \     \
       + \     \     \
        \ +-----+-----+
         \|     |     |
          +-----+-----+
    
    aber ohne Verbindungslinien, so sieht es tatsächlich so aus:
    +-----------+
    |\           \
    + \           \
     \ \           \
      \ \           \
       \ \           \
        \ +-----------+
         \|           |
          +-----------+
    
  • Konkave Räume blockieren manchmal Teile anderer Wände.
    +-----------+
    |\           \
    + \           \
     \ \     +-----+
      \ \     \    |
       \ \     \---+
        \ +-----+
         \|     |
          +-----+
    
  • Ein nachgestelltes Leerzeichen in der Eingabe oder Ausgabe ist akzeptabel. (Sie müssen angeben, ob für Ihre Antwort ein nachgestelltes Leerzeichen in der Eingabe erforderlich ist .)
  • Führende Leerzeichen müssen Leerzeichen in der Eingabe entsprechen.
  • Ich tippe immer noch nicht gern, also gewinnt der kürzeste Code

Testfälle:

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

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

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

Output:
#

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

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

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

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

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

Output:
###
###
###

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

Output:
 # #
# #
 # #
# #

Hiatsu
quelle
Kann Input / Output eine Liste von Strings sein?
Nick Kennedy
@ Nick ja. Das habe ich mit Zeichenmatrix gemeint.
Hiatsu
toll wollte nur klären!
Nick Kennedy
1
Ich mag diese Herausforderung wirklich! Nur neugierig, warum so herum und nicht das 3D-Labyrinth produzieren?
AJFaraday,
@AJFaraday Die Erstellung des Labyrinths (und mehr) wurde bereits in der von mir verknüpften Herausforderung durchgeführt.
Hiatsu

Antworten:

30

Python 2 , 81 Bytes

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)

Probieren Sie es online!

Nimmt Eingaben als Liste von Zeichenfolgen (oder als Liste von Zeichenlisten) entgegen. Druckt die Ausgabe und endet mit einem Fehler.

Die Idee ähnelt der von tsh . Wir schauen uns die ?unten markierten Zeichen an, um zu sehen, welche Leerzeichen und welche sind \:

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

In jeder Zeile mit ?'s \markiert a einen vertikalen Grat zwischen einer gefüllten Zelle und einer leeren Zelle des Labyrinths. Da sich diese Grate in der obersten Schicht des Labyrinths befinden, werden ihre \Charaktere nie durch ein anderes Labyrinthelement verdeckt.

Um die ?Positionen zu betrachten, durchläuft der Code die Zeilen k=1,4,7,...(mit dem Index Null), und in jeder Zeile wird jede sechste Position beginnend mit der Position betrachtet k. Es wird nachverfolgt, ob sich das Bit in einer leeren oder einer vollen Zelle befindet b, und dieses Bit wird bei jedem Auftreten von "a" \umgedreht. Nach jedem gelesenen Zeichen wird das Zeichen entsprechend für leer ( ) oder voll ( #) angehängt bund die resultierende Zeichenfolge gedruckt, nachdem die Zeile vollständig ist.

xnor
quelle
Das. Ist. BEEINDRUCKEND.
connectyourcharger
19

JavaScript (Node.js) , 85 Byte

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

Probieren Sie es online!

Grundidee ist: Wir kümmern uns nur um die Charaktere auf . Wenn es sich um einen Bindestrich ( ) handelt, hat die aktuelle Zelle den anderen Wert als die oberste, und wenn es sich um ein Leerzeichen ( ) handelt, hat die aktuelle Zelle den gleichen Wert.(6x+3y+3,3y)-

Danke @ Arnauld , 7 Bytes gespart

tsh
quelle
sehr schöner Einblick
Jonah
5

Jelly , 22 bis 20 Bytes

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

Probieren Sie es online!

Eine monadische Verknüpfung, die eine Jelly-Zeichenfolge als Eingabe verwendet und das verarbeitete Labyrinth als Jelly-Zeichenfolge mit einer Zeile abschließenden Leerzeichens zurückgibt.

1 Byte könnte gespeichert werden, wenn eine einzelne Zeile mit führenden Leerzeichen akzeptabel wäre.

Hat sich von @ tshs Formel inspirieren lassen , also stimmen Sie auch dieser zu!

Erläuterung

ṫ"  $                | 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
Nick Kennedy
quelle
5

05AB1E , 25 22 Bytes

-1 Byte dank Kevin Cruijssen

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

Probieren Sie es online!

Port von Xnors Python-Antwort . Übernimmt die Eingabe als Zeichenmatrix. Die TIO-Verknüpfung zeigt die Eingabe zur besseren Lesbarkeit als mehrzeilige Zeichenfolge an, wobei die |€SKopfzeile diese in das Zeichenmatrixformat konvertiert.

Grimmig
quelle
1
24 Bytes : ε'\¢„ #sè}bisðм€g„ #sè
Kevin Cruijssen
Wow, schöner Fund! Weitere Verbesserungen finden Sie in der Antwort. PS: Ich bin verwirrt über den Unterschied zwischen мund K.
Grimmy
3

Retina 0.8.2 , 72 Bytes

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

Probieren Sie es online! Erläuterung:

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

Verzerren Sie alle Linien.

-4G`

Löschen Sie die letzten drei Zeilen, da ich sie nicht benötige.

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

Behalten Sie nur die Mitte jeder Gruppe von drei Zeilen. (In Retina 1 können die beiden oben genannten Phasen meines Erachtens in einer einzigen Phase ausgeführt werden:. ,G1,3,-5`)

T` `#`\\  +\\

Füllen Sie die Flächen der Blöcke aus.

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

Behalten Sie nur das zweite Zeichen jedes Blocks bei.

Neil
quelle
2

C (clang) , 120 bis 117 Bytes

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;}

Probieren Sie es online!

Inspiriert von den Antworten der anderen.

'\'=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
AZTECCO
quelle