พื้นหลัง
ในเกมของ Nimผู้เล่นเลือกที่จะลบ "หิน" จาก "กอง": ในแต่ละเทิร์นผู้เล่นจะต้องลบระหว่างหนึ่งและหินทั้งหมดจากกองเดียว เป้าหมายของ Nim คือการเอาหินก้อนสุดท้ายออกมาหรือในตัวแปรที่ผิดประเภทเพื่อบังคับให้คู่ต่อสู้ทำเช่นนั้น - อย่างไรก็ตามมันกลับกลายเป็นว่ากลยุทธ์นั้นเหมือนกันเกือบทั้งหมด
นิ่มทำให้เกมบาร์สนุก คุณสามารถใช้ไม้ขีดไฟหรือเหรียญสำหรับ "หิน" และ "กอง" โดยทั่วไปจะจัดเรียงเป็นเส้น ด้านล่างเป็นการตั้งค่าแบบคลาสสิกที่มี 1, 3, 5 และ 7:
หากคุณไม่เคยเล่น Nim มาก่อนคุณอาจลองใช้มือลองดูก่อนที่จะลองทำสิ่งนี้ ต่อไปนี้เป็นรุ่นที่เรียกว่า "ไข่มุกก่อนสุกร"
กลยุทธ์
กลยุทธ์ที่ดีที่สุดในนิ่มก็พอหากินที่วางคนส่วนใหญ่สูญเสียอย่างต่อเนื่องกับผู้เชี่ยวชาญ แต่ง่ายที่จะอธิบายกับเลขคณิตไบนารี
อย่างไรก็ตามการดำเนินการ XOR ทางจิตเป็นเรื่องที่ยากดังนั้นโชคดีที่มีวิธีเทียบเท่ากับการมองเห็นกลยุทธ์ที่ถูกต้องซึ่งง่ายต่อการนำไปใช้ในเวลาจริงแม้ในขณะเมา
มีสามขั้นตอนเท่านั้น:
- จัดกลุ่ม "ก้อนหิน" ทางจิตใจในแต่ละบรรทัดเป็นกลุ่มย่อยที่มีขนาดเป็นพลังของ 2 เริ่มต้นด้วยขนาดที่ใหญ่ที่สุดที่เป็นไปได้: 8, 4, 2 และ 1 เพียงพอสำหรับเกมส่วนใหญ่
- ลองจับคู่แต่ละกลุ่มกับคู่ในบรรทัดอื่นเพื่อให้ทุกกลุ่มมีคู่
- หากไม่สามารถทำได้ให้ลบ "หิน" ที่ไม่ได้รับการจับคู่ออกจากบรรทัดเดียว (สิ่งนี้จะเป็นไปได้เสมอ - ดูที่ลิงค์ Wikipedia สำหรับสาเหตุ) เพื่อให้ขั้นตอนที่ 2 เป็นไปได้
หรือกล่าวอีกวิธีหนึ่งว่า: "เอาหินบางอันออกจากกองเดียวเช่นถ้าคุณจัดกลุ่มกองไว้เป็น 2 กลุ่มทุกกลุ่มอาจถูกจับคู่กับกลุ่มในกองอื่น" ด้วยข้อแม้ที่คุณไม่สามารถแยกพลังที่ใหญ่กว่าของ 2 เป็นอันที่เล็กลงได้ - เช่นคุณไม่สามารถจัดกลุ่มบรรทัดที่มี 8 ก้อนหินเป็นสองกลุ่ม 4 กลุ่ม
ตัวอย่างเช่นนี่คือวิธีที่คุณเห็นภาพกระดานด้านบน:
กระดานนี้มีความสมดุลอย่างสมบูรณ์แบบดังนั้นคุณต้องการให้คู่ต่อสู้ของคุณเคลื่อนที่ก่อน
ความท้าทาย
รับรายการจำนวนเต็มบวกที่แทนขนาดของ "กอง" ของ Nim แล้วส่งคืนการสร้างภาพข้อความธรรมดาของคณะกรรมการ Nim ตามที่ผู้เชี่ยวชาญเห็น
ตัวอย่างที่อธิบายว่าการสร้างภาพข้อมูลที่ถูกต้องดีที่สุดอย่างไร แต่คุณต้อง:
- กำหนดอักขระที่แตกต่างให้กับแต่ละกลุ่มย่อย "power-of-2" และคู่ของมัน (กลุ่มย่อยที่ไม่ได้เข้าคู่จะไม่มีคุณสมบัติ) และใช้อักขระนั้นเพื่อเป็นตัวแทนของ "สโตน" ในทั้งกลุ่มย่อยและคู่
- แทน unpaired "หิน" ใด ๆ (เช่นคนที่มีความเชี่ยวชาญจะเอาเมื่อเล่นปกติ - ไม่ misere - สะเดา)
-
โดยใช้ยัติภังค์:
จะมีหลายวิธีในการสร้างภาพข้อมูลที่ถูกต้องและทั้งหมดนั้นถูกต้อง มาทำงานในกรณีทดสอบบ้าง:
กรณีทดสอบ
อินพุต: 1, 3, 5, 7
เอาต์พุตที่เป็นไปได้ 1:
A
BBA
CCCCD
CCCCBBD
คุณอาจเลือกที่จะรวมช่องว่างระหว่างตัวละครเช่นเดียวกับบรรทัดว่างระหว่างแถว:
เอาต์พุตที่เป็นไปได้ 2:
A
B B A
C C C C D
C C C C B B D
อินพุต: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
ลำดับและตัวเลือกของตัวละครอาจเป็นสิ่งที่คุณต้องการ:
เอาต์พุตที่เป็นไปได้ 1:
G
E E
E E G
C C C C
C C C C F
B B B B D D
B B B B D D F
H H I - - - - -
A A A A A A A A I
A A A A A A A A H H
สัญลักษณ์ Unicode ก็โอเคเช่นกัน:
เอาต์พุตที่เป็นไปได้ 2:
◎
◈ ◈
◈ ◈ ◎
△ △ △ △
△ △ △ △ ◉
◐ ◐ ◐ ◐ ◀ ◀
◐ ◐ ◐ ◐ ◀ ◀ ◉
▽ ▽ ◒ - - - - -
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ◒
▥ ▥ ▥ ▥ ▥ ▥ ▥ ▥ ▽ ▽
อินพุต: 7
จากกฏจะเป็นไปตามที่ "กองเดียว" จะต้องถูกลบออก
เอาต์พุตที่เป็นไปได้ 1:
-------
เอาต์พุตที่เป็นไปได้ 2:
- - - - - - -
อินพุต: 5, 5
เอาต์พุตที่เป็นไปได้:
A A A A B
A A A A B
กฎเพิ่มเติม
- นี่คือรหัสกอล์ฟที่มีกฎมาตรฐาน รหัสที่สั้นที่สุดชนะ
- การป้อนข้อมูลมีความยืดหยุ่นและอาจถูกนำมาใช้ในรูปแบบ list-ish ที่สะดวกสำหรับคุณ
- เอาต์พุตก็มีความยืดหยุ่นเช่นกันดังตัวอย่างด้านบน รูปแบบที่เหมาะสมที่สุดจะได้รับอนุญาต ถามว่าคุณไม่แน่ใจเกี่ยวกับบางสิ่ง
["H","EE","EEH","CCCC","CCCCI","DDDDFF","DDDDFFI","AAAAAAAA","AAAAAAAA-","----------"]
AAAABBBB
แล้วมันไม่ถูกต้องและABB
ไม่ใช่ - แต่มันทำให้อ่านง่ายกว่าดังนั้นฉันคิดว่าการลดลงภายในบรรทัดเป็นกฎที่ชัดเจนที่สุด