Математика, 180 байт
(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]&
Пояснення:
(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
]&
Чиста функція, яка приймає 5x5масив. є 3-байтним символом приватного користування, що U+F3C7представляє оператор транспонування постфікса \[Transpose].
(f=Flatten@#;p=Partition): Згладжує список вводу та зберігає його f. Встановлює p = Partitionта повертає.
g=p[r,5]: Масив {{1,2,3,4,5}, ..., {21,22,23,24,25}}(це тому, що rвстановлюється Range@25).
Join[g=p[r,5],g]: список рядків і стовпців g.
p[#,2,1]&: Чиста функція, яка розділяє список #на підлістики довжини 2з перекриттям 1; тобто список сусідніх пар в #.
##&@@p[#,2,1]&: Те саме, що вище, за винятком того, що він повертає a Sequence.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: Картує попередню функцію рядків і стовпців, gщоб отримати список усіх сусідніх записів у g. Моя кишка каже, що існує коротший спосіб зробити це.
r~Graph~Cases[...]: Графік, вершини якого є цілими числами 1, ..., 25та ребрами яких є краї між сусідніми записами, у gяких є однакові відповідні записи у вхідному масиві (крім " ")
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": Шаблон, який відповідає {a,b}такому, що f[[a]] == f[[b]](те саме значення у вхідному масиві) і якому не дорівнює " ". Встановити A = f[[a]]для збереження 1байт.
...:>a<->b: Замініть кожну відповідність непрямим краєм від a до b.
VertexComponent: Повертає зв'язаний компонент другого аргументу (вершину) у першому аргументі (графік).
Tr[1^VertexComponent[...]]: Розмір підключеного компонента. Збереже 1байт від Length@VertexComponent[...].
If[Tr[...]<3,f[[#]],"x"]&: Чистий функція , яка приймає запис #в g. Якщо розмір його підключеного компонента менший 3, замініть його відповідним записом на вході. В іншому випадку замініть його на "x".
(f=Flatten@#;p=Partition)[...,5]: І, нарешті, переформатуйте результат на 5x5масив.