床を表す文字列を入力として受け取り、床の特定のパターンを作成できる最も単純なメタタイルの領域を出力または返すプログラムまたは関数を記述する必要があります。
床は正方形のグリッドの一部です。すべての正方形のタイルは、紺碧または黒のいずれかで色付けされます(入力によってa
、およびb
入力で表されます)。
フロアの例:
aaaa
ababab
aaaaa
メタタイリング
- 構築されている
N
ことにより、M
空色、黒四角の矩形メタタイル - 使用されるメタタイルは平行移動まで同一です(回転またはミラーリングすることはできません)
- 2つのメタタイルの側面が接続されている場合、それらはその全長に沿って接続する必要があります(つまり、メタタイルはスペースをグリッド状に並べます)。
メタタイルの例:
ba
aa
それによって作成されたメタタイリング:
.
.
.
babababa
aaaaaaaa
... babababa ...
aaaaaaaa
babababa
aaaaaaaa
.
.
.
このメタタイルは、左の文字が示すように、上部に表示されるフロアを作成します。
.
.
.
********
***aaaa*
... *ababab* ...
*aaaaa**
********
********
.
.
.
メタタイルの面積が小さい場合、メタタイルは他より単純です。この例には2*2 = 4
、例の床で可能な最小の面積があります。したがって、出力は4
例のようになります。
入力
- 文字列の文字から成る
a b space
とnewline
少なくとも一つを含有するa
又はb
。 - 文字(
ab
)は、1つの4連結(並列接続)形状を形成します。 - 行の前に不要なスペースはありません。つまり、
a
またはで始まる行が少なくとも1つありb
ます。 2つの入力形式から選択できます。
- 行の最後に不要な空白がありません(例に見られるように)。
- 行の右側にスペースを入れて、すべての行を最長の行と同じ長さにします。
末尾の改行はオプションです。
出力
- タイルに入力フロアが含まれる、可能な最小のメタタイルの領域である単一の整数。
例
例はダッシュで区切られています。例の3つの部分は、入力、出力、および可能な最小のメタタイルの1つです。
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つのコーナー(タイルの端にあるメタタイルを除く)に接触する必要があります。「2つのメタタイルの側面が接続されている場合、それらは全長に沿って接続する必要がある」と述べました。だからあなたの与えられた例は違法です。
—
randomra