すべてのプログラマーは、長方形□
が本当に楽しいことを知っています。この楽しさを悪化させるために、これらのキュートでファジーな図は、織り込まれたブラケットのグループに変換できます。
次のような連動する長方形のグループがあるとしましょう:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
その他の注意事項:
- 2つ
+
が隣接することはありません - 2つの長方形がエッジやコーナーを共有することはありません
- 各列に垂直方向のエッジは最大で1つしかありません
最初のステップは、長方形の左端を調べることです。4つのブラケットタイプのいずれかに割り当てます({[<
。を選択します[
。
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
次に、左から2番目の長方形を見てください。[
長方形と重なるため、異なるタイプである必要があります。を選択します(
。
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
次の左端の長方形は前の長方形と交差しませんが、前の長方形内にネストします。(
再度割り当てることにしました。通常、長方形は、可能であれば内部にネストしているものと同じタイプを割り当てることが適切ですが、バックトラッキングが必要な場合があります。
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
この次の長方形は[
再び割り当てることができます。
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
この次の長方形はちょっと楽しいです。これはa (
と[
長方形の両方に交差するため、長方形と呼ぶことができます{
(または<
、誰も好きではありません)。
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
最後の2つの長方形はそれほど悪くはありません。任意の2つの異なるタイプを使用できます。
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
長方形を読んで、私は得る[(]([{))}]<{}>
。 これは、上記の入力の1つの可能な出力です。以下は、網羅的ではない多くの可能なオプションのリストです。
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
入力
ASCII-artの長方形。それらは明確であり(上記の注を参照)、括弧の文字列に適切に変換できるという仮定に基づいています。オプションで末尾の改行を使用して、末尾のスペースがないか、長方形に埋め込まれると仮定できます。先行する空白はありません。
出力
長方形の交差制限に従う有効なブラケット文字列のいずれか。オプションの末尾の改行以外には、括弧以外の文字は使用できません。主なルールは、2つの正方形が交差する場合、それらに異なるブラケットタイプを割り当てる必要があることです。
ゴール
これはcode-golfであり、品質に対する量の不足です。
+
、左上隅にforを使用することはできません。次に(すぐ下に)+
左下隅にforを使用できますか?