Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมเพื่อรีเซ็ตรูปหลายเหลี่ยมเป็นสถานะเริ่มต้นใน Python


สมมติว่า มีรูปหลายเหลี่ยมที่มีจุดยอด n จุด แกนพลิก n จุด และจุดหมุน n จุด สิ่งต่อไปนี้เป็นจริงสำหรับแกนพลิกและจุดหมุน

  • ถ้า n เป็นเลขคี่ แกนที่พลิกแต่ละแกนจะผ่านจุดยอดเพียงจุดเดียวและอยู่ตรงกลางของด้านตรงข้าม
  • ถ้า n เป็นเลขคู่ ครึ่งหนึ่งของแกนผ่านจุดยอดตรงข้ามคู่หนึ่ง และอีกครึ่งหนึ่งผ่านคู่ของด้านตรงข้าม
  • แกนสองอันที่ตามมามีมุม 360/2n

ตอนนี้ เราหมุนรูปหลายเหลี่ยมที่ให้มา เรามีโรเตเตอร์ n ประเภทที่แตกต่างกัน k-rotator หมุนรูปหลายเหลี่ยมที่แกน k ตามเข็มนาฬิกา (360 x k)/n องศา มีรายการอินพุตรายการที่มีจำนวนเต็มหลายคู่ จำนวนเต็มแรกของคู่แสดงว่ารูปหลายเหลี่ยมถูกพลิกกลับหรือหมุน ถ้าจำนวนเต็มแรกคือ 1 รูปหลายเหลี่ยมจะหมุน ถ้าเป็น 2 รูปหลายเหลี่ยมจะพลิก จำนวนเต็มที่สองคือ k หากพลิกรูปหลายเหลี่ยม ก็จะพลิกที่แกน k หรืออย่างอื่น หากหมุนก็จะถูกหมุนด้วยมุม 360/2n การหมุนและการพลิกจะเสร็จสิ้นในขณะที่รายการไม่ว่างเปล่า

งานของเราคือการเพิ่มองค์ประกอบอื่นในรายการเพื่อให้สามารถรีเซ็ตรูปหลายเหลี่ยมไปยังตำแหน่งเริ่มต้นได้

โปรแกรมเพื่อรีเซ็ตรูปหลายเหลี่ยมเป็นสถานะเริ่มต้นใน Python

รูปภาพระบุแกนหมุนของรูปหลายเหลี่ยมสองประเภท

ดังนั้น หากอินพุตเป็น n =6, input_list =[[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]] ผลลัพธ์จะเป็น (1, 4)

หลังจากการแปลง การหมุนตามแกนที่ 4 จะรีเซ็ตรูปหลายเหลี่ยมเป็นตำแหน่งเริ่มต้น

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • decision_var :=เท็จ
  • ตำแหน่ง :=0
  • สำหรับแต่ละรายการใน input_list ให้ทำ
    • x :=item[0]
    • y :=item[1]
    • ถ้า x เท่ากับ 1 แล้ว
      • ตำแหน่ง :=ตำแหน่ง + y
    • อย่างอื่น
      • ตำแหน่ง :=y - ตำแหน่ง
      • decision_var :=not(decision_var)
  • ตำแหน่ง :=ตำแหน่ง mod n
  • ถ้าคำตัดสิน_varไม่ใช่ศูนย์ แล้ว
    • คืนคู่ (2, ตำแหน่ง)
  • มิฉะนั้น
    • คืนคู่ (1, n - ตำแหน่ง)

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(n, input_list):
   decision_var = False
   position = 0

   for item in input_list:
      x = item[0]
      y = item[1]
      if x == 1:
         position += y
      else:
         position = y - position
         decision_var = not decision_var
   position = position % n

   if decision_var:
      return (2, position)
   else:
      return (1, n - position)

print(solve(6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]))

อินพุต

6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]

ผลลัพธ์

(1, 4)