Jeder Programmierer weiß, dass Rechtecke □
wirklich Spaß machen. Um diesen Spaß zu verschärfen, können diese niedlichen und unscharfen Diagramme in Gruppen von verwobenen Klammern umgewandelt werden.
Diese Herausforderung ist das Gegenteil von meiner vorherigen .
Angenommen, Sie haben eine Gruppe von ineinandergreifenden Rechtecken wie folgt:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Zusätzliche Bemerkungen:
- Es
+
werden niemals zwei nebeneinander sein - Keine zwei Rechtecke werden jemals eine Kante oder Ecke teilen
- In jeder Spalte wird es immer höchstens eine vertikale Kante geben
Der erste Schritt besteht darin, den äußersten linken Rand eines Rechtecks zu betrachten. Weisen Sie ihm einen von vier Klammertypen zu ({[<
. Ich wähle [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Schauen Sie sich nun das zweite Rechteck ganz links an. Da es ein [
Rechteck überlappt , muss es von einem anderen Typ sein. Ich wähle (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Das nächste am weitesten links stehende Rechteck schneidet kein vorheriges Rechteck, sondern verschachtelt sich innerhalb des vorherigen. Ich entscheide mich, es (
erneut zuzuweisen . Normalerweise ist es ratsam, einem Rechteck den gleichen Typ zuzuweisen wie dem, in dem es verschachtelt ist, wenn möglich, aber manchmal ist ein Zurückverfolgen erforderlich.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Dieses nächste Rechteck kann erneut zugewiesen [
werden.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
Dieses nächste Rechteck macht ein bisschen Spaß. Es schneidet sowohl ein Rechteck (
als auch ein [
Rechteck, also könnte ich es ein {
Rechteck nennen (oder <
aber niemand mag diese).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Die letzten beiden Rechtecke sind nicht so schlimm. Sie können von zwei verschiedenen Typen sein.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Ich lese die Rechtecke ab [(]([{))}]<{}>
. Dies wäre eine mögliche Ausgabe für die obige Eingabe. Hier ist eine Liste mit vielen möglichen Optionen, die nicht vollständig sind:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
Eingang
ASCII-Art-Rechtecke, unter der Annahme, dass sie eindeutig sind (siehe Hinweise oben) und ordnungsgemäß in eine Reihe von Klammern umgewandelt werden können. Sie können entweder keine nachgestellten Leerzeichen oder ein Rechteck mit optionalen nachgestellten Zeilenumbrüchen annehmen. Es wird kein führendes Leerzeichen geben.
Ausgabe
Beliebige der gültigen Klammerzeichenfolgen, die die Schnittmengenbeschränkungen der Rechtecke einhalten. Abgesehen von einem optionalen nachgestellten Zeilenumbruch sollten keine anderen Zeichen als eckige Klammern verwendet werden. Die Hauptregel lautet: Wenn sich zwei Quadrate schneiden, sollten ihnen unterschiedliche Klammertypen zugewiesen werden.
Tor
Das ist Code-Golf, (Mangel an) Quantität über Qualität.
+
für die linke obere Ecke haben, und dann (direkt darunter) das +
für die linke untere Ecke?