Mathematica, 180 octets
(f=Flatten@#;p=Partition)[If[Tr[1^VertexComponent[r~Graph~Cases[##&@@p[#,2,1]&/@Join[g=p[r,5],g],{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b],#]]<3,f[[#]],"x"]&/@(r=Range@25),5]&
Explication:
(f=Flatten@#;p=Partition)[
If[
Tr[1^VertexComponent[
r~Graph~Cases[
##&@@p[#,2,1]&/@Join[g=p[r,5],g],
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b
],
#
]]<3,
f[[#]],
"x"
]&/@(r=Range@25),
5
]&
Fonction pure qui accepte un 5x5tableau. est le caractère à usage privé de 3 octets U+F3C7représentant l'opérateur de transposition postfix \[Transpose].
(f=Flatten@#;p=Partition): Aplanit la liste d'entrée et la stocke f. Définit p = Partitionet retourne.
g=p[r,5]: Le tableau {{1,2,3,4,5}, ..., {21,22,23,24,25}}(c'est parce qu'il rest réglé sur Range@25).
Join[g=p[r,5],g]: la liste des lignes et colonnes de g.
p[#,2,1]&: Fonction pure qui partitionne la liste #en sous-listes de longueur 2avec chevauchement 1; c'est-à-dire la liste des paires adjacentes dans #.
##&@@p[#,2,1]&: Identique à ci-dessus sauf qu'il renvoie a Sequence.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: Mappe la fonction précédente des lignes et des colonnes de gpour obtenir une liste de toutes les entrées adjacentes dans g. Mon instinct dit qu'il existe un moyen plus court de le faire.
r~Graph~Cases[...]: Graphique dont les sommets sont les entiers 1, ..., 25et dont les arêtes sont les arêtes entre les entrées adjacentes dans glesquelles ont les mêmes entrées correspondantes dans le tableau d'entrée (autre que " ")
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": Modèle qui correspond {a,b}tel que f[[a]] == f[[b]](même valeur dans le tableau d'entrée) et qui n'est pas égal à " ". Réglez A = f[[a]]pour enregistrer l' 1octet.
...:>a<->b: Remplacez chaque correspondance par un bord non orienté de a à b.
VertexComponent: Renvoie la composante connectée du deuxième argument (un sommet) dans le premier argument (un graphique).
Tr[1^VertexComponent[...]]: La taille du composant connecté. Enregistre l' 1octet de Length@VertexComponent[...].
If[Tr[...]<3,f[[#]],"x"]&: Pure fonction qui prend une entrée #dans g. Si la taille de son composant connecté est inférieure à 3, remplacez-la par l'entrée correspondante dans l'entrée. Sinon, remplacez-le par "x".
(f=Flatten@#;p=Partition)[...,5]: Et enfin remodeler le résultat en un 5x5tableau.