นิม

นิม  คือ เกมวางแผนทางคณิตศาสตร์เกมหนึ่ง ซึ่งมีผู้เล่น 2 คน และมีกติกาในการเล่นดังนี้
มีการเล่นนิมมาตั้งแต่สมัยโบราณแล้ว บางคนกล่าวว่านิมมีต้นกำเนิดจากจีน แต่ความจริงแล้ว ยังไม่มีใครรู้ได้ จากหลักฐานของชาวยุโรป พบว่า นิมมีมาตั้งแต่คริสต์ศตวรรษที่ 16 Charles L. Bouton แห่งมหาวิทยาลัยฮาร์วาร์ดเป็นผู้ตั้งชื่อเกมนี้ว่า นิม และได้พัฒนาทฤษฎีเกี่ยวกับเกมนี้ตั้งแต่ปี ค.ศ. 1901 แต่ชื่อเดิมของเกมนี้ยังไม่มีใครรู้ บางทีมันอาจมาจากภาษาเยอรมันคำว่า "nimm!" ซึ่งแปลว่า "take!" หรืออาจจะมาจากภาษาอังกฤษเก่า ซึ่งก็แปลว่า take เหมือนกัน มีการตั้งข้อสังเกตว่าเมื่อเราหมุนคำว่า "NIM" เราจะได้คำว่า "WIN" ซึ่งอาจเป็นเพียงความบังเอิญ
นอกจากนี้ ยังมีผู้นิยมเล่นเกมนิมในแบบตรงกันข้ามคือ ผู้เล่นที่หยิบก้อนหินก้อนสุดท้าย จะเป็นผู้แพ้ แต่โดยทั่วไป เรานิยมเล่นโดยใช้กติกาแบบแรกมากกว่า
ตัวอย่างการเล่น.
ตัวอย่างการเล่นนิมด้วยกติกาปกติ สมมติว่าเริ่มต้นด้วยกองหิน 3 กอง แต่ละกองมีก้อนหินอยู่ 3, 4, 5 ก้อน ตามลำดับ
 จำนวนก้อนหินในกอง การหยิบ
 A B C
 3 4 5 เราหยิบก้อนหิน 2 ก้อน ออกจาก A
 1 4 5 คุณหยิบก้อนหิน 3 ก้อน ออกจาก C
 1 4 2 เราหยิบก้อนหิน 1 ก้อน ออกจาก B
 1 3 2 คุณหยิบก้อนหิน 1 ก้อน ออกจาก B
 1 2 2 เราหยิบก้อนหิน ออกจาก A
 0 2 2 คุณหยิบก้อนหิน 1 ก้อน ออกจาก B
 0 1 2 เราหยิบก้อนหิน 1 ก้อน ออกจาก C ("แต่ถ้าใช้กติกาแบบที่สอง เราจะหยิบก้อนหิน 2 ก้อนออกจาก C ทำให้เหลือ (0, 1, 0) ")
 0 1 1 คุณหยิบก้อนหิน 1 ก้อน ออกจาก B
 0 0 1 เราหยิบก้อนหิน ออกจาก C ดังนั้น เราจึงเป็นผู้ชนะ
ทฤษฎีทางคณิตศาสตร์.
นิมเป็นเกมที่แก้ด้วยคณิตศาสตร์ได้ และสามารถคำนวณได้ง่ายว่าผู้เล่นคนใดจะชนะ,ต้องหยิบอย่างไรถึงจะชนะ ตัวอย่างเช่น เกมที่เริ่มต้นด้วยกองหินที่มีก้อนหินอยู่ 3, 4, 5 ก้อน ผู้เล่นที่เล่นคนแรกจะชนะเสมอ ถ้าเขาเล่นด้วยกลยุทธ์ที่ถูกต้อง
และไม่ขึ้นกับว่ากติกาจะเป็นแบบปกติหรือแบบที่สองก็ตาม
หัวใจของทฤษฎีของเกมนี้ก็คือ ผลบวกเลขโดดฐานสอง (binary digital sum) ซึ่งเป็นผลบวกในเลขฐานสองที่ไม่มีการทด การดำเนินการนี้เรียกว่าการ exclusive or (xor) ในทฤษฎีเกมเชิงการจัดจะเรียกว่า ผลบวกนิม (nim-sum) ผลบวกนิมของ x และ y เขียนแทนด้วย "x" ⊕ "y" ซึ่งต่างจากผลบวกธรรมดาที่เขียนแทนด้วย "x" + "y" ตัวอย่างการคำนวณของกองหินที่มีก้อนหินอยู่ 3, 4, 5 ก้อน มีดังนี้
 เลขฐานสอง เลขฐานสิบ
 0112 310 กอง A
 1002 410 กอง B
 1012 510 กอง C
 0102 210 ดังนั้น ผลบวกนิมของกอง A, B, C เท่ากับ 3 ⊕ 4 ⊕ 5 = 2
หรือจะคำนวณแบบนี้ก็ได้ ให้เขียนจำนวนก้อนหินในแต่ละกองให้อยู่ในรูปผลบวกของเลขกำลังสอง จากนั้นให้ตัดคู่ที่เท่ากันออกไป ถ้าตัดไม่ได้แล้ว ให้บวกเลขที่เหลือเข้าด้วยกัน ก็จะได้ผลลัพธ์ เช่น
 3 = 2 + 1 = 2 + 1 กอง A
 4 = 4 = 4 กอง B
 5 = 4 + 1 = 4 + 1 กอง C
 2 = 2 ผลลัพธ์ที่ได้จากการตัดคู่เลข 1 กับ คู่เลข 4
กลยุทธ์ในการเล่นให้ชนะคือ ทำผลบวกนิมให้เท่ากับ 0 เสมอ. ซึ่งถ้าผลบวกนิมก่อนที่คุณจะหยิบไม่เท่ากับ 0 แล้ว จะมีวิธีที่ทำให้ผลบวกนิมเท่ากับ 0 ได้เสมอ. ถ้าคุณไม่เล่นพลาดเลยสักตา ผู้เล่นอีกฝ่ายจะเป็นฝ่ายแพ้. เพื่อหาว่าจะต้องหยิบก้อนหินจากกองใดจำนวนเท่าไร เราจะให้ X คือผลบวกนิมของจำนวนก้อนหินทุกกอง ให้หาผลบวกนิมของจำนวนก้อนหินในแต่ละกอง กับ X. กลยุทธ์คือ คุณจะต้องทำให้จำนวนก้อนหินในกองใดกองหนึ่ง เหลือเท่ากับผลบวกนิมของจำนวนหินเดิมในกองนั้นกับ X. จากตัวอย่างข้างบน ผลบวกนิมของทุกกองเท่ากับ X = 3 ⊕ 4 ⊕ 5 = 2 ผลบวกนิมของจำนวนก้อนหินในกอง A=3, B=4, C=5 กับ X เท่ากับ
 A ⊕ X = 3 ⊕ 2 = 1
 B ⊕ X = 4 ⊕ 2 = 6
 C ⊕ X = 5 ⊕ 2 = 7
มีเพียงกองเดียวที่สามารถลดจำนวนก้อนหินให้เท่ากับค่าที่ต้องการได้ คือ กอง A (เราสามารถลดก้อนหินในกอง A จาก 3 ก้อนเป็น 1 ก้อนได้ แต่ไม่สามารถลดกอง B จาก 4 ก้อนเป็น 6 ก้อนได้ และไม่สามารถลดกอง C จาก 5 ก้อนเป็น 7 ก้อนได้) ดังนั้น การเล่นที่ถูกคือต้องลดจำนวนก้อนหินในกอง A ให้เท่ากับ 1 (หยิบหินออกจากกอง A ออกไป 2 ก้อน)
ในกรณีที่มีกองหินอยู่ 2 กอง จะมีกลยุทธ์ที่ง่ายกว่าคือ ให้ลดก้อนหินของกองที่ใหญ่กว่า ให้เท่ากับอีกกองหนึ่ง หลังจากนั้น ไม่ว่าผู้เล่นอีกฝ่ายจะหยิบจำนวนก้อนหินเท่าใด คุณก็หยิบก้อนหินจำนวนเท่ากันจากอีกกอง วิธีนี้จะรับประกันว่าคุณจะเป็นผู้หยิบก้อนหินก้อนสุดท้ายเสมอ
ถ้าเล่นกติกาแบบที่สอง กลยุทธ์ในการเล่นยังคงเหมือนกัน ยกเว้น ในกรณีที่การหยิบจะทำให้กองหินทุกกองมีก้อนหินน้อยกว่า 2 ก้อน ในกรณีนี้ การหยิบที่ถูกต้องคือหยิบให้เหลือจำนวนกองที่มีก้อนหิน 1 ก้อน อยู่เป็นจำนวนคี่ (ซึ่งถ้าเล่นกติกาปกติ การหยิบที่ถูกต้องคือหยิบให้เหลือจำนวนกองที่มีก้อนหิน 1 ก้อน อยู่เป็นจำนวนคู่)
ในการเล่นกติกาแบบที่สอง ซึ่งเริ่มต้นด้วยกองหินที่มีก้อนหินอยู่ 3, 4, 5 ก้อน จะมีกลยุทธ์ในการเล่นเป็นดังนี้
 A B C ผลบวกนิม
 3 4 5 0102=210 เราหยิบก้อนหิน 2 ก้อน ออกจาก A ทำให้ผลบวกนิมเท่ากับ 000 ดังนั้น เราจะชนะ
 1 4 5 0002=010 คุณหยิบก้อนหิน 2 ก้อน ออกจาก C
 1 4 3 1102=610 เราหยิบก้อนหิน 2 ก้อน ออกจาก B
 1 2 3 0002=010 คุณหยิบก้อนหิน 1 ก้อน ออกจาก C
 1 2 2 0012=110 เราหยิบก้อนหิน 1 ก้อน ออกจาก A
 0 2 2 0002=010 คุณหยิบก้อนหิน 1 ก้อน ออกจาก C
 0 2 1 0112=310 ในการเล่นแบบปกติ เราจะหยิบก้อนหิน 1 ก้อนออกจากกอง B
 ทำให้เหลือกองที่มีหิน 1 ก้อน อยู่เป็นจำนวนคู่
 ในการเล่นแบบกติกาที่สอง เราจะหยิบก้อนหินทั้งหมดออกจากกอง B
 ทำให้เหลือกองที่มีหิน 1 ก้อน อยู่เป็นจำนวนคี่
 0 0 1 0012=110 คุณหยิบก้อนหิน 1 ก้อน ออกจาก C ดังนั้น คุณจึงแพ้
การพิสูจน์.
C. Bouton เป็นผู้อธิบายกลยุทธ์ในการเล่นให้ชนะเสมอ และให้บทพิสูจน์ดังนี้
ทฤษฎีบท. ในเกมนิมแบบปกติ ผู้เล่นคนแรกจะมีกลยุทธ์ในการเล่นให้ชนะเสมอ ก็ต่อเมื่อ ผลบวกนิมของจำนวนก้อนหินทุกกองไม่เท่ากับ 0. มิฉะนั้นแล้ว ผู้เล่นคนที่สองจะมีกลยุทธ์ในการเล่นให้ชนะเสมอ
"พิสูจน์:" ผลบวกนิม (⊕) มีสมบัติการเปลี่ยนหมู่ และการสลับที่ และยังมีสมบัติ "x" = 0 ด้วย
ให้ "x"1, ..., "xn" คือ จำนวนก้อนหินในแต่ละกองก่อนการหยิบ และ "y"1, ..., "yn" คือ จำนวนก้อนหินในแต่ละกองหลังการหยิบ ให้ "s" = "x"1 ⊕ ... ⊕ "xn" และ "t" = "y"1 ⊕ ... ⊕ "yn". ถ้าเราหยิบกองที่ "k", เราจะได้ "xi" = "yi" สำหรับ "i" ≠ "k", และ "xk" > "yk". จากสมบัติของ ⊕ เราจะได้
 "t" = 0 ⊕ "t"
 = "s" ⊕ "s" ⊕ "t"
 = "s" ⊕ ("x"1 ⊕ ... ⊕ "xn") ⊕ ("y"1 ⊕ ... ⊕ "yn")
 = "s" ⊕ ("x"1 ⊕ "y"1) ⊕ ... ⊕ ("xn" ⊕ "yn")
 = "s" ⊕ 0 ⊕ ... ⊕ 0 ⊕ ("xk" ⊕ "yk") ⊕ 0 ⊕ ... ⊕ 0
 = "s" ⊕ "xk" ⊕ "yk"
 (*) "t" = "s" ⊕ "xk" ⊕ "yk"
เราจะพิสูจน์ทฤษฎีบทนี้ ด้วยการอุปนัยจากบทตั้งทั้ง 2 ข้อต่อไปนี้ 
บทตั้งที่ 1. ถ้า "s" = 0 แล้ว "t" ≠ 0 เสมอ ไม่ขึ้นอยู่กับว่าจะหยิบแบบใด
"พิสูจน์:" ถ้าไม่มีก้อนหินเหลืออยู่ บทตั้งนี้จะถือว่าเป็นจริง (และผู้เล่นคนแรกก็จะเป็นผู้แพ้ตามนิยามของเกม)
แต่ถ้ามีก้อนหินเหลืออยู่ การหยิบก้อนหินออกจากกองที่ "k" จะทำให้ "t" = "xk" ⊕ "yk" จาก (*) ซึ่งค่านี้จะไม่เท่ากับศูนย์เพราะ "xk" ≠ "yk"
บทตั้งที่ 2. ถ้า "s" ≠ 0 แล้ว จะมีวิธีหยิบที่ทำให้ "t" = 0 เสมอ
"พิสูจน์:" ให้ "d" เป็นบิตที่ไม่เป็นศูนย์ที่อยู่ซ้ายสุดของ "s", เลือก "k" ที่ "xk" บิตที่ "d" ไม่เป็นศูนย์ (ต้องมี "k" อยู่ มิฉะนั้นแล้ว "s" บิตที่ "d" จะเป็น 0)
ให้ "yk" = "s" ⊕ "xk"
เรารับประกันได้ว่า "yk" < "xk"
เพราะว่า "xk" กับ "yk" จะมีบิตที่อยู่ทางซ้ายบิตที่ "d" เหมือนกัน
แต่ "yk" บิตที่ "d" จะเปลี่ยนจาก 1 เป็น 0 (ค่าลดไป 2"k") และ
การเปลี่ยนแปลงในบิตที่เหลือ จะมีค่าไม่เกิน 2"k"−1
ดังนั้น ผู้เล่นคนแรกจึงสามารถหยิบก้อนหิน "xk" − "yk" ก้อน ออกจากกองที่ "k" ได้
จะได้
 "t" = "s" ⊕ "xk" ⊕ "yk" (จาก (*))
 = "s" ⊕ "xk" ⊕ ("s" ⊕ "xk")
 = 0
การเล่นแบบอื่น ๆ.
มีการเล่นนิมในอีกลักษณะหนึ่งคือ แทนที่จะหยิบก้อนหินจำนวนเท่าใดก็ได้ ให้เปลี่ยนเป็นหยิบก้อนหินได้จำกัด นั่นคือ ผู้เล่นจะหยิบก้อนหินออกได้ 1 หรือ 2 หรือ ... หรือ k ก้อนต่อการหยิบหนึ่งครั้งเท่านั้น (ซึ่งควรเรียกว่า เกมการลบ "S" (1,2...,"k") มากกว่า) โดยทั่วไป เกมนี้จะเล่นแค่กองหินกองเดียว
กลยุทธ์ในการเล่นจะไม่แตกต่างจากการเล่นแบบเดิม ยกเว้น ก่อนที่เราจะหาค่าผลบวกนิม เราจะต้องลดขนาดของกองหิน ด้วยการมอดุโลกับ "k" + 1 ก่อน. ถ้าทุกกองมอดุโลแล้วได้ 0 (สำหรับกติกาแบบที่สอง) ให้หยิบก้อนหิน "k" ก้อน ออกจากกองใดกองหนึ่งก็ได้ ถ้าเล่นจนเหลือกองเดียวและมีก้อนหินเหลือ "n" ก้อน ผู้เล่นคนที่สองจะชนะได้ ก็ต่อเมื่อ
 "n" ≡ 0  (mod "k"+1) (สำหรับกติกาแบบปกติ) , หรือ
 "n" ≡ 1  (mod "k"+1) (สำหรับกติกาแบบที่สอง)