每个程序员都知道矩形□
真的很有趣。为了加剧这种乐趣,可以将这些可爱而模糊的图表转换为交织在一起的括号组。
这个挑战与我以前的挑战相反。
假设您有一组互锁的矩形,如下所示:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
附加条款:
- 不会有两个
+
相邻 - 没有两个矩形共享边或角
- 每列最多只能有一个垂直边缘
第一步是查看任何矩形的最左边。将其指定为四种括号类型之一({[<
。我选择[
。
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
现在看第二个最左边的矩形。由于它与[
矩形重叠,因此必须为其他类型。我选择(
。
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
下一个最左边的矩形不与任何前一个矩形相交,但嵌套在前一个矩形内。我选择(
再次分配它。通常,如果可能的话,最好为矩形分配与其内部嵌套的矩形相同的类型,但是有时需要回溯。
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
可以[
再次分配下一个矩形。
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
下一个矩形有点有趣。它与a (
和一个[
矩形相交,所以我可以称其为{
矩形(或者<
没有人喜欢它们)。
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
最后两个矩形还不错。它们可以是任何两种不同的类型。
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
读完这些矩形,我得到了[(]([{))}]<{}>
。 这将是上述输入的一种可能的输出。以下列出了许多可能的选项,但并不详尽:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
输入项
ASCII矩形,前提是它们是明确的(请参见上面的注释),并且可以正确地转换为方括号。您可以假设没有尾随空格或使用可选的尾随换行符将其填充为矩形。不会有任何前导空格。
输出量
遵守矩形相交限制的任何有效括号字符串。除可选的尾随换行符外,除方括号外不应有其他字符。主要规则是,如果两个正方形相交,则应为其分配不同的括号类型。
目标
这是代码质量,(数量)超过质量。
+
的左上角不能有一个,然后它的左下角(紧邻下面)+
没有?