Meus filhos têm um tapete de alfabeto para brincar, algo assim:
Depois de meses com os ladrilhos do tapete dispostos aleatoriamente, cansei-me e coloquei todos os ladrilhos do tapete agrupados por seções, de acordo com as cores de fundo. Então, se as letras representam a cor de fundo, eu tenho um tapete como este:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Portanto, para as cores A, B, C, D e E, sempre há uma maneira de conectar todos os ladrilhos com a mesma cor de fundo na horizontal ou na vertical no tapete. É o que chamo de um tapete adequadamente agrupado por cores . Você pode ver os grupos do exemplo anterior nas seguintes tabelas:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Além disso, existe apenas um grupo para cada cor, portanto, isso não seria válido:
ABA
ABA
Como os blocos de cores A não são agrupados em apenas um grupo. Isso também não seria válido porque os blocos não se conectam horizontal ou verticalmente:
AB
BA
O desafio
Dada uma matriz bidimensional de caracteres no intervalo ASCII imprimível (não precisa ser um quadrado desde que o tamanho de ambas as dimensões seja igual ou superior a 1), verifique se a matriz representa um tapete adequadamente agrupado por cores (cada caractere diferente na matriz representa uma cor diferente). A entrada pode estar em qualquer formato razoável, desde que represente uma matriz bidimensional de caracteres (matriz de caracteres 2D, matriz de seqüências de caracteres do mesmo comprimento etc.) e a saída deve ser um par de valores de verdade e falsey (0 / 1, 't' / 'f', verdadeiro / falso, desde que algo seja retornado e os valores de retorno sejam consistentes nas entradas).
Este é o código-golfe, portanto, pode ganhar o programa / função / método / lambda mais curto para cada idioma!
Exemplos
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
Meu tapete adequadamente agrupado por cores
(Eu ainda tenho que consertar essas fronteiras ...)