Nie lubię pisać, więc rysuję swoje labirynty w bardzo prostym formacie:
# #####
# #
# ### #
# # # #
# # #
##### #
Czy to nie labirynt ? Oczywiście uważam, że wszystkie labirynty powinny wyglądać 3d, podobnie, ale nie on sam jak to wyzwanie , dla maksymalnej inteligencji labiryntu , więc (niechętnie) ręcznie zaktualizowałem labirynt, aby wyglądał tak:
+-----+ +-----------------------------+
|\ \ |\ \
+ \ \ + \ \
\ \ \ \ +-----------------------+ \
\ \ \ \| |\ \
\ \ \ +-----------------------+ \ \
\ \ \ +-----------------+ \ \ \
\ \ \ |\ \ \ \ \
\ \ \ + \ \ \ \ \
\ \ \ \ \ +-----+ \ \ \ \
\ \ \ \ \ \ |\ \ \ \ \
\ \ \ \ \ \---+ \ \ \ \ \
\ \ \ \ +-----+ \ \ \ \ \ \
\ \ \ \| | \ \ \ \ \ \
\ \ \ +-----+ \ \ \ \ \ \
\ \ +-----------------+ \ \ \ \
\ \ \ \ \ \
\ \ \ \ \ \
\ +-----------------------------+ \ +-----+
\| | \| |
+-----------------------------+ +-----+
Niestety, trudno jest pracować z labiryntami w tym formacie, a po tym całym ręcznym pisaniu nie chcę po prostu przepisywać oryginału, więc muszę napisać program, który zrobi dla mnie odwrócenie.
Zasady
- Wejście będzie multiline ciąg znaków lub matryca składające się wyłącznie z
" "
,"|"
,"\"
,"+"
,"-"
, i nowej linii. - Wyjście składa się z
" "
i"#"
, zgodnie ze wzorem opisanym przez labirynt. - Ze względu na moje niesamowite umiejętności projektowania labiryntu nie możesz zakładać niczego o strukturze labiryntu, poza tym, że ma on prawidłową dekonstrukcję.
- W 3d-ification (proces, który musisz teraz cofnąć) każdy z nich
#
został przekonwertowany na ten blok znaków 3x4x7:+-----+ |\ \ + \ \ \ +-----+ \| | +-----+
- Sąsiadujące bloki zostały połączone, w ten sposób:
ale bez łączenia linii, więc wygląda to tak:+-----+-----+ |\ \ \ + \ \ \ \ +-----+-----+ \|\ \ \ + \ \ \ \ +-----+-----+ \| | | +-----+-----+
+-----------+ |\ \ + \ \ \ \ \ \ \ \ \ \ \ \ +-----------+ \| | +-----------+
- Przestrzenie wklęsłe czasami blokują części innych ścian.
+-----------+ |\ \ + \ \ \ \ +-----+ \ \ \ | \ \ \---+ \ +-----+ \| | +-----+
- Dopuszczalne są końcowe białe znaki na wejściu lub wyjściu. (Musisz określić, czy twoja odpowiedź wymaga spacji końcowych w danych wejściowych.)
- Wiodące białe znaki muszą odpowiadać pustym spacjom na wejściu.
- Nadal nie lubię pisać, więc wygrywa najkrótszy kod
Przypadki testowe:
Input:
+-----+ +-----------------------------+
|\ \ |\ \
+ \ \ + \ \
\ \ \ \ +-----------------------+ \
\ \ \ \| |\ \
\ \ \ +-----------------------+ \ \
\ \ \ +-----------------+ \ \ \
\ \ \ |\ \ \ \ \
\ \ \ + \ \ \ \ \
\ \ \ \ \ +-----+ \ \ \ \
\ \ \ \ \ \ |\ \ \ \ \
\ \ \ \ \ \---+ \ \ \ \ \
\ \ \ \ +-----+ \ \ \ \ \ \
\ \ \ \| | \ \ \ \ \ \
\ \ \ +-----+ \ \ \ \ \ \
\ \ +-----------------+ \ \ \ \
\ \ \ \ \ \
\ \ \ \ \ \
\ +-----------------------------+ \ +-----+
\| | \| |
+-----------------------------+ +-----+
Output:
# #####
# #
# ### #
# # # #
# # #
##### #
Input:
+-----+
|\ \
+ \ \
\ +-----+
\| |
+-----+
Output:
#
Input:
+-----------------+
|\ \
+ \ \
+-----+ +-----+ +-----+
|\ \ |\ \
+ \ \---+ \ \
\ \ +-----+ \ +-----+ \
\ \ \ | \| |\ \
\ \ \---+ +-----+ \ \
\ \ +-----+ +-----+ \
\ \ \ |\ \
\ \ \ + \ \
\ +-----+ +-----+ +-----+
\| |\ \ |
+-----+ \ \---+
\ +-----------------+
\| |
+-----------------+
Output:
###
## ##
# #
## ##
###
Input:
+-----------------------------------------------------------------------------------------------------+
|\ \
+ \ \
\ +-----------------------------------------------+ +-----------------------------------------+ \
\| |\ \ |\ \
+-----------------------------------------------+ \ \---------------------------------------+ \ \
+-----+ +-----------------------------+ \ \ \ +-----------------------------+ \ \ \
|\ \ |\ \ \ \ \ |\ \ \ \ \
+ \ \ + \ \ \ \ \ + \ \ \ \ \
\ \ \ \ +-----------+ +-----+ \ \ \ \ \ +-----------------------+ \ \ \ \
\ \ \ \| |\ \ |\ \ \ \ \ \| |\ \ \ \ \
\ \ \ +-----------+ \ \---+ \ \ \ \ \ +-----------------------+ \ \ \ \ \
\ \ \ +-----+ \ \ \ \ \ \ \ \ +-----------------------+ \ \ \ \ \ \
\ \ \ |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ +-----+ \ \ \ \ \ \ \ +-----------------------------+ \ \ \ \ \ \
\ \ \ \| | \ \ \ \ \ \ \| | \ \ \ \ \ \
\ \ \ +-----+ \ \ \ \ \ \ +-----------------------------+ \ \ \ \ \ \
\ \ +-----------+ \ \ \ \ \ +-----------------------------------+ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ \ +-----------+ \ \ \ \ \ +-----------------------+ +-----+ \ \ \ \ \ \
\ \ \ | \ \ \ \ \ \ |\ \ | \ \ \ \ \ \
\ \ \---------+ \ \ \ \ \ \---------------------+ \ \---+ \ \ \ \ \ \
\ \ \ +-----------+ \ \ \ \ +-----------+ \ \ \ +-----+ \ \ +-----+
\ \ \ |\ \ \ \ \ |\ \ \ \ \ |\ \ \| |
\ \ \ + \ \ \ \ \ + \ \ \ \ \ + \ \ +-----+
\ \ \ \ +-----------------+ \ \ \ \ \ \ \ +-----+ \ +-----+ \
\ \ \ \| | \ \ \ \ \ \ \| | \| |\ \
\ \ \ +-----------------+ \ \ \ \ \ \ +-----+ +-----+ \ \
\ \ +-----------------------------+ +-----+ +-----------------------+ +-----------+
\ \ \
\ \ \
\ +-----------------------------------------------------------------------------------------------------+
\| |
+-----------------------------------------------------------------------------------------------------+
Output:
#################
# #
# ##### # ##### #
# # # # # #
# # # # ##### # #
# # # # #
### # ####### # #
# # # # # #
# ### # ## # ##
# # ## #
#################
Input:
+-----------------+
|\ \
+ \ \
\ \ \
\ \ \
\ \ \
\ \ \
\ \ \
\ \ \
\ +-----------------+
\| |
+-----------------+
Output:
###
###
###
Input: (Note leading whitespace)
+-----+ +-----+
|\ \ |\ \
+ \ \ + \ \
+-----+-----+-----+-----+
|\ \ |\ \ |
+ \ \---+ \ \---+
\ +-----+-----+-----+-----+
\| |\ \ |\ \
+-----+ \ \---+ \ \
+-----+-----+-----+-----+
|\ \ |\ \ |
+ \ \---+ \ \---+
\ +-----+ \ +-----+
\| | \| |
+-----+ +-----+
Output:
# #
# #
# #
# #
Odpowiedzi:
Python 2 , 81 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę ciągów znaków (lub listę list znaków). Drukuje dane wyjściowe, kończąc się błędem.
Pomysł jest podobny do tsh . Patrzymy na znaki oznaczone
?
poniżej, aby zobaczyć, które są spacjami, a które\
:W każdym rzędzie z
?
's\
oznacza pionowy grzbiet między wypełnioną komórką a pustą komórką labiryntu. Ponieważ te grzbiety znajdują się w górnej warstwie labiryntu, ich\
postacie nigdy nie są zasłaniane przez inny element labiryntu.Aby spojrzeć na
?
pozycje, kod iteruje przez wierszek=1,4,7,...
(indeksowane od zera), aw każdym rzędzie patrzy na każdą 6. pozycję, zaczynając od pozycjik
. Śledzi, czy znajdujemy się w pustej, czy pełnej komórceb
, i odwraca ten bit za każdym razem, gdy\
napotkasz a. Po każdym odczytanym znaku dodaje znak pusty () lub pełny (
#
) zgodnie zb
i drukuje wynikowy ciąg po zakończeniu wiersza.źródło
JavaScript (Node.js) , 85 bajtów
Wypróbuj online!
-
Dzięki @ Arnauld , zapisano 7 bajtów
źródło
Galaretka ,
2220 bajtówWypróbuj online!
Monadyczny link pobierający ciąg Galaretki jako dane wejściowe i zwracający przetworzony labirynt jako Łańcuch Galaretki zawierający jeden wiersz końcowych białych znaków.
1 bajt
Ḋ
mógłby zostać zapisany, gdyby akceptowalna była pojedyncza linia wiodących białych znaków.Czerpałem inspirację ze wzoru @ tsh , więc pamiętajcie o tym!
Wyjaśnienie
źródło
05AB1E ,
2522 bajtów-1 bajt dzięki Kevin Cruijssen
Wypróbuj online!
Port Python xnor odpowiedź . Pobiera dane wejściowe jako macierz znaków. Łącze TIO pokazuje wejście jako ciąg wielowierszowy dla czytelności, a
|€S
nagłówek konwertuje to na format macierzy znaków.źródło
ε'\¢„ #sè}
doðм€g„ #sè
м
iK
.Retina 0.8.2 , 72 bajty
Wypróbuj online! Wyjaśnienie:
Odrzuć wszystkie linie.
Usuń ostatnie trzy wiersze, ponieważ ich nie potrzebuję.
Zachowaj tylko środek każdej grupy trzech linii. (W Retina 1 uważam, że powyższe dwa etapy można wykonać w jednym etapie:.
,G1,3,-5`
)Wypełnij ściany bloków.
Zachowaj tylko drugi znak każdego bloku.
źródło
C (clang) ,
120117 bajtówWypróbuj online!
Zainspirowany innymi odpowiedziami.
źródło