Mathematica, 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]&: 겹치는 #길이의 하위 목록 으로 목록을 분할하는 순수한 기능 ; 즉,에서 인접한 쌍의 목록입니다 .21#
##&@@p[#,2,1]&:를 반환한다는 점을 제외하면 위와 동일합니다 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배열로 바꿉니다.