Toán học, 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]&
Giải trình:
(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
]&
Hàm thuần túy chấp nhận một 5x5
mảng.
là ký tự sử dụng riêng 3 byte U+F3C7
đại diện cho toán tử chuyển đổi hậu tố \[Transpose]
.
(f=Flatten@#;p=Partition)
: Làm phẳng danh sách đầu vào và lưu nó vào f
. Đặt p = Partition
và trả lại nó.
g=p[r,5]
: Mảng {{1,2,3,4,5}, ..., {21,22,23,24,25}}
(điều này là do r
được đặt thành Range@25
).
Join[g=p[r,5],g]
: danh sách các hàng và cột của g
.
p[#,2,1]&
: Hàm thuần túy phân vùng danh sách #
thành các danh sách con có độ dài 2
chồng chéo 1
; tức là danh sách các cặp liền kề trong #
.
##&@@p[#,2,1]&
: Tương tự như trên trừ nó trả về a Sequence
.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]
: Bản đồ chức năng trước đó của các hàng và cột của g
để có được danh sách tất cả các mục liền kề trong g
. Ruột của tôi nói rằng có một cách ngắn hơn để làm điều này.
r~Graph~Cases[...]
: Đồ thị có các đỉnh là các số nguyên 1, ..., 25
và các cạnh của nó là các cạnh giữa các mục liền kề g
có cùng các mục tương ứng trong mảng đầu vào (trừ " "
)
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" "
: Mẫu phù hợp với {a,b}
sao cho f[[a]] == f[[b]]
(cùng giá trị trong mảng đầu vào) và mẫu không bằng " "
. Đặt A = f[[a]]
để lưu 1
byte.
...:>a<->b
: Thay thế mọi trận đấu bằng một cạnh không xác định từ a đến b.
VertexComponent
: Trả về thành phần được kết nối của đối số thứ hai (một đỉnh) trong đối số thứ nhất (biểu đồ).
Tr[1^VertexComponent[...]]
: Kích thước của thành phần được kết nối. Lưu 1
byte từ Length@VertexComponent[...]
.
If[Tr[...]<3,f[[#]],"x"]&
: Hàm thuần túy có một mục #
trong g
. Nếu kích thước của thành phần được kết nối của nó nhỏ hơn 3
, thay thế nó bằng mục tương ứng trong đầu vào. Nếu không, thay thế nó bằng "x"
.
(f=Flatten@#;p=Partition)[...,5]
: Và cuối cùng định hình lại kết quả thành một 5x5
mảng.