Mathematica 188 185 170 115 130 46 48 karakter
açıklama
Daha önceki sürümlerde, birbirlerinden 1'er satranç tahtası olan bir pozisyon grafiği çizdim. GraphComponents
daha sonra, her bileşen için bir tane olan ada sayısını ortaya çıkardı.
Bu sürüm , fiziksel olarak bitişik MorphologicalComponents
olan dizi bölgelerindeki kümeleri bulmak ve numaralandırmak için kullanılır 1
. Grafikleme gereksiz olduğundan, bu büyük bir kod ekonomisi ile sonuçlanır.
kod
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
Örnek
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
Nasıl çalışır
Veri dizi olarak girildi; Mathematica'da, bu listelerin bir listesidir.
Giriş dizisinde, veriler değiştirme ile 1
've 0
' lere dönüştürülür.
/.{"."->0,"*"->1}
burada /.
bir çatı ve çatı formudur ReplaceAll
değiştirme kuralları takip eder. Bu esas olarak diziyi siyah beyaz bir resme dönüştürür. Yapmamız gereken tek şey fonksiyonu uygulamak Image
.
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]
Beyaz kareler 1 değerine sahip hücrelere karşılık gelir.
Aşağıdaki resimde, yaklaşımın kullandığı bazı adımlar gösterilmektedir. Giriş matrisi sadece 1
's ve 0
' ler içerir. Çıktı matrisi, her morfolojik kümeyi bir sayı ile etiketler. (Hem girdi hem de çıktı matrislerini MatrixForm
iki boyutlu yapılarını vurgulamak için içine sardım.)
MorphologicalComponents
1
s'yi, her hücrenin küme numarasına karşılık gelen bir tamsayı ile değiştirir .
Max
en büyük küme numarasını döndürür.
Adaların görüntülenmesi
Colorize
Her adayı benzersiz şekilde renklendirir.