Mathematica 188 185 170 115 130 46 48 ตัวอักษร
คำอธิบาย
ในรุ่นก่อนหน้านี้ฉันได้ทำกราฟตำแหน่งที่มีระยะกระดานหมากรุกเท่ากับ 1 จากแต่ละตำแหน่ง GraphComponents
จากนั้นเปิดเผยจำนวนเกาะหนึ่งแห่งต่อองค์ประกอบ
รุ่นปัจจุบันใช้MorphologicalComponents
ในการค้นหาและจัดกลุ่มจำนวนของกลุ่มที่อยู่ในอาร์เรย์ - ภูมิภาคที่1
มีต่อเนื่องทางกายภาพ เนื่องจากการสร้างกราฟไม่จำเป็นจึงส่งผลให้เกิดการใช้โค้ดอย่างประหยัด
รหัส
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
ตัวอย่าง
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
มันทำงานอย่างไร
ข้อมูลที่ป้อนเข้าเป็นอาร์เรย์ ใน Mathematica นี่คือรายการของรายการ
ในอาร์เรย์อินพุตข้อมูลจะถูกแปลงเป็น1
's และ0
' s โดยการแทนที่
/.{"."->0,"*"->1}
โดยที่/.
เป็นรูปแบบมัดReplaceAll
ตามด้วยกฎการแทนที่ นี่เป็นการแปลงอาเรย์เป็นภาพขาวดำ สิ่งที่เราต้องทำคือใช้ฟังก์ชั่น, Image
.
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]
สี่เหลี่ยมสีขาวตรงกับเซลล์ที่มีค่า 1
ภาพด้านล่างแสดงขั้นตอนที่ใช้ เมทริกซ์การป้อนข้อมูลมีเพียง1
'และ0
' s เมทริกซ์เอาต์พุตจะเลเบลแต่ละคลัสเตอร์ที่มีตัวเลข (ฉันหุ้มทั้งเมทริกซ์อินพุตและเอาต์พุตMatrixForm
เพื่อเน้นโครงสร้างสองมิติของมัน)
MorphologicalComponents
แทนที่1
s ด้วยเลขจำนวนเต็มที่สอดคล้องกับหมายเลขคลัสเตอร์ของแต่ละเซลล์
Max
ส่งคืนหมายเลขคลัสเตอร์ที่ใหญ่ที่สุด
การแสดงหมู่เกาะ
Colorize
จะระบายสีเกาะแต่ละเกาะโดยเฉพาะ