通过添加一些空格和换行符(并使其保持相同的阅读顺序),可以将长度为正三角数(1、3、6、10、15 ...)的字符串排列为“等边文字三角形”。
例如,长度为10的字符串ABCDEFGHIJ
变为:
A
B C
D E F
G H I J
编写一个包含这样的字符串的程序或函数,只包含字符0
和1
。(您可以假定输入有效。)
对于所得的“等边文字三角形”,输出(打印或返回)表示对称类型的四个数字之一:
2
如果三角形具有双边对称性,则输出。也就是说,它从任意一个角到另一侧的中点都有一条对称线。例子:
0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 1
3
如果三角形具有旋转对称性,则输出。也就是说,它可以旋转120°而没有视觉变化。例子:
0 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 1
输出
6
如果三角形有两个双边和旋转对称。也就是说,它与同时输出2
和的条件相匹配3
。例子:
0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0
输出
1
,如果三角形既无双边也不旋转对称。例子:
1 1 0 0 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1
以字节为单位的最短代码获胜。抢七是较早的答案。
除了可选的尾随换行符之外,输入字符串还可能没有空格/换行符填充或结构-它应该是纯0
的和1
。
如果需要,可以使用任何两个不同的可打印ASCII字符代替0
和1
。
测试用例
直接取自示例。
011 -> 2
101 -> 2
001010 -> 2
1111010111 -> 2
0100110100 -> 3
0011000010 -> 3
101111111010111 -> 3
101001100010000100111 -> 3
0 -> 6
1 -> 6
000 -> 6
100101 -> 6
0000100000 -> 6
110000 -> 1
001101 -> 1
1101111111 -> 1
111111000111111 -> 1
将任何输入“旋转” 120°当然会得到相同的输出。