Düzenli çokgen bölgeleri


10

Tüm köşegenleri çizilmiş düzenli bir N-gon verildiğinde, köşegenler kaç bölge oluşturur?

Örneğin, normal bir üçgen tam olarak 1, bir kare tam olarak 4, beşgen tam olarak 11 ve bir altıgen 24'tür.

  • skor, çözeltideki bayt sayısı ile ters orantılıdır
  • çalışma sürelerine göre puanlara küçük geçiştirme faktörleri eklenebilir
  • çokgeni çevreleyen bölge sayılmaz

1
Yani ... bir program yazmanızı döner bu
mob

Yanıtlar:


11

Mathematica 118

Düzenli bir n-gon'daki bölgelerin sayısını çizilmiş tüm köşegenlerle hesaplamak için iyi tanımlanmış rutinler olmasına rağmen , bunlar oldukça hantaldır. Bir görüntü işleme yaklaşımı almanın eğlenceli olabileceğini düşündüm : n-gon'u köşegenleri ile çizersek, çizilen görüntüden bölgeleri (daha kesin olarak, görüntünün rasterleştirilmiş ve ikilileştirilmiş gösteriminden) saymak mümkün olabilir mi? dizi)?

Aşağıdakiler, bir çokgenin gerçek görüntüsünü üretir ve işler ve rasterleştirilmiş görüntüden bölge sayısını belirler.

Table[MorphologicalEulerNumber@Binarize@Rasterize@CompleteGraph[k, ImageSize->1200,EdgeStyle->Thickness[Large]],{k,3,14}]

{1, 3, 11, 24, 50, 80, 154, 220, 375, 444, 781, 952}

Mühendisin çözümü olarak adlandırılabilecek şey budur. İşi yapar, ancak sadece bazı sınırlı koşullarda. (Ve yavaş: yukarıdaki kodun çalışması 4.24 s sürdü.) Yukarıdaki rutin , aşağıda gösterilen 14-Tam grafiğe kadar ve doğru şekilde çalışıyor . Görüntü 1200 x 1200 pikselde gösterilse bile 952 bölgenin bazılarının görülmesinin çok zor olduğu göz önüne alındığında bunu şaşırtıcı buldum.

Aşağıdaki resim resimdir önce rasterleştirilen ve ikili hale ediliyor.

14 tam grafik


3

Excel, 341 bayt

@ Mob'un yorumunda Woflram Mathworld bağlantısında verilen formülü uygular.

=A1*(A1^3-6*A1^2+23*A1-42)/24+1+(MOD(A1,2)=0)*(A1*(42*A1-5*A1^2-40)/48-1)-(MOD(A1,4)=0)*3*A1/4+(MOD(A1,6)=0)*A1*(310-53*A1)/12+(MOD(A1,12)=0)*49/2*A1+(MOD(A1,18)=0)*32*A1+(MOD(A1,24)=0)*19*A1-(MOD(A1,30)=0)*36*A1-(MOD(A1,42)=0)*50*A1-(MOD(A1,60)=0)*190*A1-(MOD(A1,84)=0)*78*A1-(MOD(A1,90)=0)*48*A1-(MOD(A1,120)=0)*78*A1-(MOD(A1,210)=0)*48*A1

Açıklık getirmek için hareketsiz:

=A1*(A1^3-6*A1^2+23*A1-42)/24+1
+(MOD(A1,2)=0)  *(A1*(42*A1-5*A1^2-40)/48-1)
-(MOD(A1,4)=0)  *3*A1/4
+(MOD(A1,6)=0)  *A1*(310-53*A1)/12
+(MOD(A1,12)=0) *49/2*A1
+(MOD(A1,18)=0) *32*A1
+(MOD(A1,24)=0) *19*A1
-(MOD(A1,30)=0) *36*A1
-(MOD(A1,42)=0) *50*A1
-(MOD(A1,60)=0) *190*A1
-(MOD(A1,84)=0) *78*A1
-(MOD(A1,90)=0) *48*A1
-(MOD(A1,120)=0)*78*A1
-(MOD(A1,210)=0)*48*A1 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.