Mathematica, 180 bayt
(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]&
Açıklama:
(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
]&
Bir 5x5diziyi kabul eden saf işlev . postfix transpoze operatörünü temsil eden 3 baytlık özel kullanım karakterdirU+F3C7\[Transpose] .
(f=Flatten@#;p=Partition): Giriş listesini düzleştirir ve kaydeder f. Ayarlar p = Partitionve döndürür.
g=p[r,5]: Dizi {{1,2,3,4,5}, ..., {21,22,23,24,25}}(bunun nedeni rayarlandığı için Range@25).
Join[g=p[r,5],g]: öğesinin satır ve sütunlarının listesi g.
p[#,2,1]&: Listeyi çakışma ile #uzunluk alt listelerine ayıran saf işlev ; yani, içindeki bitişik çiftlerin listesi .21#
##&@@p[#,2,1]&: Yukarıdaki gibi aynı a döndürür Sequence.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: İçindeki gbitişik girişlerin bir listesini almak için satır ve sütunlarının önceki işlevini eşler g. Bağırsak, bunu yapmanın daha kısa bir yolu olduğunu söylüyor.
r~Graph~Cases[...]: 1, ..., 25Kenarları tamsayı olan ve kenarları g, giriş dizisinde aynı karşılık gelen girişlere sahip bitişik girişler arasındaki kenarlar olan grafik (" " )
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": Eşleşen desen {a,b} Öyle f[[a]] == f[[b]](giriş dizisinde aynı değer) ve eşit olmayan" " . Bayt A = f[[a]]kaydetmek için ayarlayın 1.
...:>a<->b: Her eşleşmeyi a'dan b'ye yönlendirilmemiş bir kenarla değiştirin.
VertexComponent: Birinci bağımsız değişkendeki (grafik) ikinci bağımsız değişkenin (bir tepe noktası) bağlı bileşenini döndürür.
Tr[1^VertexComponent[...]]: Bağlı bileşenin boyutu. kaydeder1 baytLength@VertexComponent[...] .
If[Tr[...]<3,f[[#]],"x"]&: Bir girişi alır Saf fonksiyon #içindeg . Bağlı bileşeninin boyutu küçükse 3, girişi girişteki ilgili girişle değiştirin. Aksi takdirde, ile değiştirin "x".
(f=Flatten@#;p=Partition)[...,5]: Ve son olarak sonucu bir 5x5dizi olarak yeniden şekillendirin .