私の子供には、次のようなアルファベットマットがあります。
数か月後、マットのタイルをランダムに配置した後、疲れて、背景色に応じてセクションごとにグループ化されたマットのタイルをすべて配置しました。したがって、文字が背景色を表す場合、次のようなマットができました。
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
したがって、A、B、C、D、およびEの色については、マット内のすべてのタイルを同じ背景色で水平または垂直に接続する方法が常にあります。それは私が色によって適切にグループ化されたマットと呼ぶものです。次の表で、前の例のグループを確認できます。
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
また、すべての色に対して1つのグループしかないため、これは無効です。
ABA
ABA
カラーAタイルは1つのグループのみにグループ化されていないためです。また、タイルは水平または垂直に接続しないため、これも無効になります。
AB
BA
チャレンジ
印刷可能なASCII範囲の文字の2次元配列(両方の次元のサイズが1以上である限り正方形である必要はありません)が与えられている場合、配列が色で適切にグループ化されたマットを表すかどうかを確認します(配列内の異なる文字はそれぞれ異なる色を表します)。入力は、文字の2次元配列(2D char配列、同じ長さの文字列の配列など)を表す限り、任意の妥当な形式であり、出力は、真偽値と偽値(0 / 1、 't' / 'f'、true / false、何かが返され、戻り値が入力間で一貫している限り)。
これはコードゴルフなので、各言語の最短のプログラム/関数/メソッド/ラムダが勝つかもしれません!
例
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
色別に適切にグループ化されたマット
(まだこれらの境界線を修正する必要があります...)