Każdy programista wie, że prostokąty □
są naprawdę zabawne. Aby zaostrzyć tę zabawę, te urocze i rozmyte diagramy można przekształcić w grupy przeplatanych nawiasów.
To wyzwanie jest odwrotnością mojego poprzedniego .
Załóżmy, że masz grupę blokujących się prostokątów:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Dodatkowe uwagi:
- Nigdy nie
+
będzie dwóch sąsiadujących ze sobą - Żadne dwa prostokąty nigdy nie będą miały krawędzi ani narożnika
- W każdej kolumnie będzie zawsze tylko jedna pionowa krawędź
Pierwszym krokiem jest spojrzenie na lewą krawędź dowolnego prostokąta. Przypisz jeden z czterech typów wsporników ({[<
. Wybiorę [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Teraz spójrz na drugi prostokąt najbardziej po lewej stronie. Ponieważ zachodzi na [
prostokąt, musi być innego typu. Wybiorę (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Następny prostokąt znajdujący się najbardziej po lewej stronie nie przecina się z żadnym poprzednim prostokątem, ale zagnieżdża się w poprzednim. Wybieram przypisanie go (
ponownie. Zazwyczaj dobrym pomysłem jest przypisanie prostokąta tego samego typu co to, co jest zagnieżdżone, jeśli to możliwe, ale czasami konieczne jest cofnięcie.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Ten następny prostokąt można przypisać [
ponownie.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
Ten następny prostokąt jest trochę zabawny. Przecina on zarówno prostokąt, jak (
i [
prostokąt, więc mógłbym nazwać go {
prostokątem ( <
ale nikomu się to nie podoba).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Dwa ostatnie prostokąty nie są takie złe. Mogą być dowolnych dwóch różnych typów.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Czytam prostokąty [(]([{))}]<{}>
. Byłby to jeden z możliwych wyników dla powyższego wejścia. Oto lista wielu możliwych opcji, które nie są wyczerpujące:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
Wkład
Prostokąty ASCII-art, przy założeniu, że są jednoznaczne (patrz uwagi powyżej) i można je poprawnie przekształcić w ciąg nawiasów. Możesz założyć, że nie ma spacji końcowych lub jest wypełniony prostokątem, z opcjonalnym końcowym znakiem nowej linii. Nie będzie wiodących białych znaków.
Wydajność
Dowolny prawidłowy ciąg nawiasów, który spełnia ograniczenia przecięcia prostokątów. Poza opcjonalnym końcowym znakiem nowej linii nie powinno być innych znaków niż nawiasy. Główną zasadą jest, że jeśli dwa kwadraty przecinają się, należy im przypisać różne typy nawiasów.
Cel
To jest golf golfowy (brak) ilości ponad jakość.
+
za” w lewym górnym rogu, a następnie (bezpośrednio pod) w +
lewym dolnym rogu?