Mathematica, 180 byte
(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]&
Penjelasan:
(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
]&
Fungsi murni yang menerima 5x5array. adalah karakter penggunaan pribadi 3 byte yang U+F3C7mewakili operator transpos postfix \[Transpose].
(f=Flatten@#;p=Partition): Ratakan daftar input dan simpan di f. Set p = Partitiondan kembalikan.
g=p[r,5]: Array {{1,2,3,4,5}, ..., {21,22,23,24,25}}(ini karena rdisetel ke Range@25).
Join[g=p[r,5],g]: daftar baris dan kolom g.
p[#,2,1]&: Fungsi murni yang memecah daftar #menjadi daftar panjang 2dengan tumpang tindih 1; yaitu, daftar pasangan yang berdekatan di #.
##&@@p[#,2,1]&: Sama seperti di atas kecuali ia mengembalikan a Sequence.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: Memetakan fungsi sebelumnya dari baris dan kolom guntuk mendapatkan daftar semua entri yang berdekatan di g. Naluriku mengatakan ada cara yang lebih pendek untuk melakukan ini.
r~Graph~Cases[...]: Grafik yang simpulnya adalah bilangan bulat 1, ..., 25dan ujung-ujungnya adalah tepi antara entri yang berdekatan gyang memiliki entri terkait yang sama dalam array input (selain " ")
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": Pola yang cocok {a,b}sehingga f[[a]] == f[[b]](nilai yang sama dalam array input) dan yang tidak sama dengan " ". Setel A = f[[a]]untuk menyimpan 1byte.
...:>a<->b: Ganti setiap kecocokan dengan ujung yang tidak terarah dari a ke b.
VertexComponent: Mengembalikan komponen yang terhubung dari argumen kedua (titik) di argumen pertama (grafik).
Tr[1^VertexComponent[...]]: Ukuran komponen yang terhubung. Menghemat 1byte dari Length@VertexComponent[...].
If[Tr[...]<3,f[[#]],"x"]&: Fungsi Pure yang mengambil sebuah entri #di g. Jika ukuran komponen yang terhubung kurang dari 3, ganti dengan entri yang sesuai di input. Kalau tidak, ganti dengan "x".
(f=Flatten@#;p=Partition)[...,5]: Dan akhirnya membentuk kembali hasilnya menjadi sebuah 5x5array.