Mes enfants ont un tapis d'alphabet avec lequel jouer, quelque chose comme ceci:
Après des mois avec les carreaux du tapis placés au hasard, je me suis fatigué et j'ai placé tous les carreaux du tapis regroupés par sections en fonction de leurs couleurs de fond. Donc, si les lettres représentent la couleur d'arrière-plan, j'ai un tapis comme celui-ci:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Ainsi, pour les couleurs A, B, C, D et E, il existe toujours un moyen de connecter toutes les tuiles avec la même couleur de fond horizontalement ou verticalement dans le passe-partout. C'est ce que j'appelle un tapis correctement groupé par couleurs . Vous pouvez voir les groupes de l'exemple précédent dans les tableaux suivants:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
De plus, il n'y a qu'un seul groupe pour chaque couleur, donc ce ne serait pas valide:
ABA
ABA
Parce que les tuiles de couleur A ne sont pas regroupées dans un seul groupe. Cela ne serait pas non plus valide car les tuiles ne se connectent pas horizontalement ou verticalement:
AB
BA
Le défi
Étant donné un tableau bidimensionnel de caractères dans la plage ASCII imprimable (n'a pas besoin d'être carré tant que la taille des deux dimensions est égale ou supérieure à 1), vérifiez si le tableau représente un tapis correctement groupé par couleurs (chaque caractère différent du tableau représente une couleur différente). L'entrée peut être dans n'importe quel format raisonnable tant qu'elle représente un tableau de caractères à 2 dimensions (tableau de caractères 2D, tableau de chaînes de même longueur, etc.), et la sortie doit être une paire de valeurs true et falsey (0 / 1, 't' / 'f', true / false, peu importe tant que quelque chose est retourné et que les valeurs de retour sont cohérentes entre les entrées).
Il s'agit de code-golf, donc le programme / fonction / méthode / lambda le plus court pour chaque langue peut gagner!
Exemples
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
Mon tapis correctement regroupé par couleurs
(Je dois encore fixer ces frontières ...)