Mathematica 188 185 170 115 130 46 48 karakter
Penjelasan
Dalam versi sebelumnya, saya membuat grafik posisi yang memiliki jarak papan catur 1 dari satu sama lain. GraphComponents
kemudian terungkap jumlah pulau, satu per komponen.
Versi yang sekarang digunakan MorphologicalComponents
untuk menemukan dan menentukan jumlah cluster yang ada di array - region 1
yang berdekatan secara fisik. Karena grafik tidak diperlukan, ini menghasilkan ekonomi kode yang sangat besar.
Kode
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
Contoh
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
Bagaimana itu bekerja
Data dimasukkan sebagai array; di Mathematica, ini adalah daftar daftar.
Dalam larik input, data dikonversi menjadi 1
dan 0
oleh penggantian
/.{"."->0,"*"->1}
di mana /.
bentuk infix ReplaceAll
diikuti oleh aturan penggantian. Ini pada dasarnya mengubah array menjadi gambar hitam dan putih. Yang perlu kita lakukan adalah menerapkan fungsi Image
,.
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]
Kotak putih sesuai dengan sel yang memiliki nilai, 1.
Gambar di bawah ini menunjukkan beberapa langkah yang digunakan pendekatan. Matriks input hanya berisi 1
'dan 0
'. Matriks keluaran memberi label setiap gugus morfologis dengan angka. (Saya membungkus matriks input dan output MatrixForm
untuk menyoroti struktur dua dimensi mereka.)
MorphologicalComponents
menggantikan 1
s dengan integer yang sesuai dengan nomor cluster setiap sel.
Max
mengembalikan nomor cluster terbesar.
Menampilkan Kepulauan
Colorize
akan mewarnai setiap pulau secara unik.