Toán học 188 185 170 115 130 46 48 ký tự
Giải trình
Trong các phiên bản trước, tôi đã tạo một biểu đồ các vị trí có khoảng cách bàn cờ là 1 với nhau. GraphComponents
sau đó tiết lộ số lượng đảo, mỗi đảo một thành phần.
Phiên bản hiện tại sử dụng MorphologicalComponents
để tìm và đánh số cụm của các cụm trong mảng - các khu vực nơi 1
tiếp giáp vật lý. Bởi vì đồ thị là không cần thiết, điều này dẫn đến một nền kinh tế mã lớn.
Mã
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
Thí dụ
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
Làm thế nào nó hoạt động
Dữ liệu được nhập vào dưới dạng một mảng; trong Mathematica, đây là danh sách các danh sách.
Trong mảng đầu vào, dữ liệu được chuyển đổi thành 1
's và 0
' bằng cách thay thế
/.{"."->0,"*"->1}
trong đó /.
là một hình thức infix ReplaceAll
theo sau bởi các quy tắc thay thế. Điều này về cơ bản chuyển đổi các mảng thành một hình ảnh đen trắng. Tất cả chúng ta cần làm là áp dụng chức năng Image
,.
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]

Các ô vuông màu trắng tương ứng với các ô có giá trị, 1.
Hình dưới đây cho thấy một số bước tiếp cận sử dụng. Ma trận đầu vào chỉ chứa 1
's và 0
'. Ma trận đầu ra nhãn mỗi cụm hình thái với một số. (Tôi đã bọc cả ma trận đầu vào và đầu ra MatrixForm
để làm nổi bật cấu trúc hai chiều của chúng.)
MorphologicalComponents
thay thế 1
s bằng một số nguyên tương ứng với số cụm của mỗi ô.

Max
trả về số cụm lớn nhất.
Hiển thị quần đảo
Colorize
sẽ tô màu mỗi hòn đảo độc đáo.
