您应该编写一个程序或函数,该程序或函数接收一个描述地板的字符串作为输入并输出或返回最简单的元平铺区域,该区域可以创建给定的地板图案。
地板是正方形网格的一部分。每个方形图块都用天蓝色或黑色上色(由a
和b
在输入中表示)。
一个示例楼层:
aaaa
ababab
aaaaa
元平铺
- 由一个
N
由M
天蓝色和黑色正方形组成的矩形meta-tile 构建 - 直到平移为止,使用的元瓦片都是相同的(您不能旋转或镜像它们)
- 如果两个meta-tile的边连接,则它们应沿其整个长度连接(即meta-tiles以网格状方式平铺空间)
元区块示例:
ba
aa
以及它创建的元平铺:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
此元平铺会创建显示的上方楼层,如左侧字母所示:
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
如果meta-tile的区域较小,则meta-tiling比另一个更简单。2*2 = 4
对于示例楼层,我们的示例的面积最小。因此输出应4
为示例。
输入值
- 由字符组成
a b space
且newline
至少包含一个a
或的字符串b
。 - 字母(
ab
)形成一种4联(并排连接)的形状。 - 行的开头将没有多余的空间,即,至少会有一行以
a
或开头b
。 您可以选择两种输入格式:
- 行末没有多余的空格(如示例所示)。
- 行右侧的空格使所有行的长度与最长的行相同。
尾随换行符是可选的。
输出量
- 一个整数,即最小可能的元区块的面积,其图块中包含输入楼层。
例子
示例以短划线分隔。示例的三个部分是输入,输出和可能的最小元拼贴之一。
a
1
a
-----------------
aaaa
aaa
a
1
a
-----------------
aabaab
abaa
aaba
6
aab
aba
-----------------
aabaab
a a a
aabab
18
aabaab
aaaaaa
aababa
-----------------
ba
aaab
8
baaa
aaab
-----------------
aaaa
ababb
aaaa
10
aaaaa
ababb
-----------------
a aa
ab ba
aba
6
aa
ab
ba
-----------------
aaaa
abab
aaaa
4
aa
ab
-----------------
ba
ba
b
4
ba
ab
-----------------
baa
aba
aab
9
baa
aba
aab
-----------------
aaaa
aabaa
aaaa
6
aaa
aab
这是代码高尔夫球,因此最短的入场券获胜。
@Ypnypn每个角都必须触摸其他3个角(平铺边缘上的meta-tiles除外)。我将其描述为“如果两个meta-tile的边连接在一起,则它们应沿其整个长度连接”。因此,您给出的示例是非法的。
—
randomra