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 5x5
diziyi 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 = Partition
ve döndürür.
g=p[r,5]
: Dizi {{1,2,3,4,5}, ..., {21,22,23,24,25}}
(bunun nedeni r
ayarlandığı 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 .2
1
#
##&@@p[#,2,1]&
: Yukarıdaki gibi aynı a döndürür Sequence
.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]
: İçindeki g
bitiş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, ..., 25
Kenarları 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 5x5
dizi olarak yeniden şekillendirin .