当我们处于三角形网格踢的时候,我想指出的是,在三角形网格上有一个等同于多米诺骨牌的东西。它们被称为polyiamonds,是通过沿其边缘将等边三角形粘合在一起而形成的形状。在此挑战中,您将要确定三角形网格的哪些子集为多边形,以及它们是否在其中具有孔。因为只需要9个三角形就可以制造出一个带孔的多边形,因此您的代码需要尽可能短。
网格
我们将使用Martin的三角形网格布局作为输入:
注意以下事实:三角形的中心形成一个大致矩形的网格,并且左上三角形“指向”上方。然后,我们可以通过给出矩形“星形图”来描述此网格的子集,该星形图指示包括哪些三角形和不包括哪些三角形。例如,此地图:
** **
*****
对应于包含一个孔的最小的多边形:
孔洞
其中包含像上面的例子中的孔(区域不是polyiamond,其由所述的两个区在所有侧面包围的部分A polyiamond 是)不是,拓扑来说,简单地连接。
挑战
编写一个函数或程序,当且仅当所指示的三角形网格的子集是简单连接的多边形时,才将如上所述的“星图”作为输入并输出真值。
更多例子
*** ***
*******
对应于polyiamond
只需连接即可。
* *
** **
***
对应于polyiamond
只需连接即可。
** **
*** **
****
对应于非 polyiamond
这不会简单地连接,即使它是一个polyiamond。
输入规格
- 输入将仅由星号,空格和换行符组成。
- 输入的第一个字符将始终是空格或星号(对应于网格左上角的向上指向的三角形)。
- 第一行和最后一行始终至少会有一个星号。
- 无法保证第一行之后的行不会为空。连续两个换行符可能会出现在合法输入中。
- 线长不必全部相同。
获奖条件
这是 代码高尔夫球,因此以字节为单位的最短答案会获胜。
测试用例
真实地图:
1) *
2) *
*
3) **
4) *** ***
*******
5) * *
** **
***
6) *
**
*
7) **
***
****
8) ****
** *
*****
9) ***********
** ** **
**** ** **
**
************
虚假地图:
1) *
*
*
2) * *
3) *
*
4) **
**
5) ***
***
6) ** **
*****
7) ** **
*** **
****
8) *
*
9) *****
** *
*****
AV VA\nVAVAV
而不是** **\n*****
因为它使人类更容易可视化。我已经对Martin的ASCII图之一进行了编辑。