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

โปรแกรมหาผู้ชนะเกมพายเรือพายใน Python


สมมติว่าเรามีความสูงของอาร์เรย์ มีหอคอยที่แตกต่างกัน n แห่งที่มีความสูงต่างกัน Amal และ Bimal กำลังเล่นเกม กติกาของเกมมีดังนี้

  • อามาลเล่นก่อนเสมอ

  • ในระหว่างการเคลื่อนที่แต่ละครั้ง ผู้เล่นปัจจุบันจะเลือกหอคอยที่มีความสูง X และแยกออกเป็นหอคอย Y ที่มีความสูง Z ต่างกัน [Y*Z =X; X และ Y> 1]

  • ใครไม่ขยับจะแพ้เกมนี้

เราต้องหาชื่อผู้ชนะให้เจอ

ดังนั้น หากอินพุตเท่ากับความสูง =[3,1,2] ผลลัพธ์จะเป็น Bimal เนื่องจากความสูงเริ่มต้นคือ {3,1,2} หาก Amal ทำลายความสูงของหอคอย 2 เป็นสองหอคอยที่มีความสูง 1 อาร์เรย์ความสูงใหม่จะเป็น {3,1,1,1} Bimal สามารถทำลายหอคอยที่มีความสูง 3 และสร้างหอคอยสามแห่งที่มีความสูง 1 ได้ ดังนั้น Amal จึงไม่มี ย้ายดังนั้น Bimal ชนะ

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

  • กำหนดฟังก์ชัน util() การดำเนินการนี้จะใช้เวลาจำกัด ค่าขีดจำกัดเริ่มต้นคือ 10^3+5
  • ผลลัพธ์ :=อาร์เรย์ของขนาดที่จำกัดและเติมด้วย 0
  • สำหรับฉันอยู่ในช่วง 2 เพื่อ จำกัด - 1 ทำ
    • s :=ชุดใหม่
    • สำหรับ j ในช่วง 1 ถึงพื้นของสแควร์รูทของ i ทำ
      • d :=ผลหารของ i/j, r :=ส่วนที่เหลือของ i/j
      • ถ้า r เท่ากับ 0 แล้ว
        • ถ้า j เป็นเลขคี่
          • แทรกผลลัพธ์[d]) ลงใน s
        • ถ้า d เป็นเลขคี่
          • แทรกผลลัพธ์[j] ลงใน s
    • j :=0
    • ในขณะที่ j มีอยู่ใน s ให้ทำ
      • j :=j + 1
      • ผลลัพธ์[i] :=j
  • ผลตอบแทน
  • g :=util()
  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −
  • r :=0
  • ส่วนสูงแต่ละคน ทำ
    • r :=r XOR g[i]
  • ถ้า r ไม่ใช่ศูนย์ แล้ว
    • ส่งคืน "Amal"
  • มิฉะนั้น
    • ส่งคืน "Bimal"

ตัวอย่าง

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

def util(limit=10**3+5):
   result = [0] * limit

   for i in range(2, limit):
      s = set()
      for j in range(1, int(i**0.5)+1):
         d, r = divmod(i, j)

         if r == 0:
            if j & 1:
               s.add(result[d])
            if d & 1:
               s.add(result[j])

      j = 0
      while j in s: j += 1
      result[i] = j

   return result

g = util()

def solve(height):
   r = 0

   for i in height:
      r ^= g[i]

   if r:
      return "Amal"
   else:
      return "Bimal"

height = [3,1,2]
print(solve(height))

อินพุต

[3,1,2]

ผลลัพธ์

Bimal