ภูมิภาคของรูปหลายเหลี่ยมปกติ


10

เมื่อกำหนดให้ N-gon ปกติพร้อมเส้นทแยงมุมทั้งหมดจะวาดเส้นทแยงมุมได้กี่ภูมิภาค

ตัวอย่างเช่นสามเหลี่ยมปกติมี 1 อย่างแน่นอนสี่เหลี่ยมจัตุรัสมี 4 ประการเพนตากอนมี 11 อย่างแน่นอนและหกเหลี่ยมมี 24

  • คะแนนแปรผกผันกับจำนวนของไบต์ในการแก้ปัญหา
  • ปัจจัยเหลวไหลขนาดเล็กอาจถูกเพิ่มเข้าไปในคะแนนตามรันไทม์ของพวกเขา
  • พื้นที่รอบ ๆ รูปหลายเหลี่ยมจะไม่นับ

1
ดังนั้น ... เขียนโปรแกรมที่คืนสิ่งนี้
mob

คำตอบ:


11

Mathematica 118

แม้ว่าจะมีกิจวัตรที่กำหนดไว้อย่างดีสำหรับการคำนวณจำนวนพื้นที่ใน n-gon ปกติพร้อมเส้นทแยงมุมทั้งหมดที่วาดออกมาแต่ก็ค่อนข้างยุ่งยาก ฉันคิดว่ามันอาจสนุกที่จะใช้วิธีการประมวลผลภาพ : ถ้าเราวาด n-gon ด้วย diagonals มันจะเป็นไปได้ไหมที่จะนับพื้นที่จากภาพที่วาด (แม่นยำยิ่งขึ้นจากการแสดง rasterized และ binarized เป็น อาร์เรย์)?

ต่อไปนี้สร้างและประมวลผลภาพที่แท้จริงของรูปหลายเหลี่ยมและกำหนดจำนวนพื้นที่จากภาพที่แรสเตอร์

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}

นี่คือสิ่งที่อาจเรียกว่าเป็นทางออกของวิศวกร มันทำให้งานเสร็จ แต่อยู่ในเงื่อนไขที่ จำกัด เท่านั้น (และมันช้า: โค้ดด้านบนใช้เวลา 4.24 วินาทีในการทำงาน) รูทีนด้านบนทำงานได้อย่างถูกต้องจนถึงและรวมกราฟ 14-Completeดังที่แสดงด้านล่าง ฉันพบสิ่งที่น่าประหลาดใจเนื่องจากบางพื้นที่ 952 แห่งนั้นมองเห็นได้ยากแม้ในขณะที่ภาพจะแสดงที่ 1200 ถึง 1200 พิกเซล

ภาพด้านล่างเป็นภาพก่อนที่จะได้รับการแรสเตอร์และไบนา

กราฟ 14 สมบูรณ์


3

Excel, 341 ไบต์

ใช้สูตรที่ระบุในลิงก์ Woflram Mathworld ในความคิดเห็นของ @ mob

=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

Ungolfed เพื่อความชัดเจน:

=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 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.