六边形网格最近已成为应对二维数据挑战的一种相当流行的方法。但是,到目前为止,似乎同样忽略了同样有趣的三角形网格。我想通过一个非常简单的挑战来纠正这一问题。
首先,我们如何表示三角形网格?考虑以下示例(暂时忽略正确的图表):
单元整齐地落在常规网格上(与常规网格的区别仅在于哪些单元被视为相邻单元):
1234567
89abcde
fghijkl
mnopqrs
现在,如右图所示,三角形网格具有三个主轴:水平轴和两个对角轴。
在ASCII网格中突出显示这些内容:
AVAVAVA
VAabcAV
fVAiAVl
mnVAVrs
挑战
您将获得一个代表三角形网格的矩形字符串(其中左上角是一个向上的三角形)。大部分带有be的单元格.
,但只有两个单元格是#
,例如:
....#
.#...
.....
确定两者#
是否沿网格的三个轴中的任何一个对齐(即,它们是否沿上面突出显示的三个方向中的任何一个方向位于一行上)。对于此示例,答案为“否”。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。
输入可以是由换行符或其他方便字符分隔的单个字符串,也可以是字符串列表。您可以使用任意两个(一致的)可打印ASCII字符代替.
和#
。
输出应该是一个truthy如果突出显示的细胞对准值和falsy否则值。
适用标准代码高尔夫球规则。
测试用例
真实网格:
.#..#.
#
#
...........
...#.......
...........
...........
...........
.......#...
...........
...........
.......#...
...........
...........
...........
...#.......
...........
.#.........
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.......#...
.........#.
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
...#.......
...........
.#.....#...
...........
...........
...........
伪造的网格:
#.....
.....#
.....#
#.....
...#.......
...........
...........
...........
...........
.......#...
...........
...........
...#.......
...........
...........
...........
...........
.........#.
.......#...
...........
...........
...........
...........
...#.......
...........
...........
.......#...
...........
...........
...........
...........
.#.........