สร้างโปรแกรมที่สั้นที่สุดในการตรวจสอบที่ได้รับรางวัลใน n dเกม Tic Tac เท้า
โปรแกรมของคุณควรทำงานเมื่อn
(ความกว้าง) และd
(หมายเลขมิติ) อยู่ในช่วงเหล่านี้:
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2
(3 2คือ 3 จาก 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3เช่น 3 โดย 3 โดย 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2คือ 6 จาก 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
และอื่น ๆ
การชนะ (หากคุณเล่น Tic Tac Toe หลายมิติมากพอจะเป็นเช่นนี้)
เพื่อให้มีการชนะผู้เล่นคนหนึ่งจะต้องมีสี่เหลี่ยมที่อยู่ติดกันทั้งหมดตามแนว นั่นคือผู้เล่นนั้นจะต้องมีการn
เคลื่อนไหวในบรรทัดที่จะเป็นผู้ชนะ
ตั้งอยู่ใกล้เคียง:
- กระเบื้องแต่ละจุด เช่น (0,0,0,0,0) เป็นจุด
d=5
- ไพ่ที่อยู่ติดกันคือไพ่ทั้งคู่ซึ่งอยู่ในหน่วยเดียวกัน d-cube กล่าวอีกนัยหนึ่งระยะทาง Chebyshevระหว่างแผ่นคือ 1
- กล่าวอีกนัยหนึ่งถ้าจุด
p
อยู่ติดกับจุดq
จากนั้นทุกพิกัดในพิกัดp
ที่สอดคล้องกันในq
ความแตกต่างจากมันไม่เกินหนึ่ง นอกจากนี้อย่างน้อยในการประสานงานคู่แตกต่างกันโดยหนึ่ง
บรรทัด:
- เส้นถูกกำหนดโดยเวกเตอร์และกระเบื้อง เส้นคือแต่ละไทล์ที่กระทบกับสมการ:
p0 + t
<
some vector with the same number of coordinates as p0>
อินพุต :
อินพุตจะเป็น STDIN บรรทัดแรกของการป้อนข้อมูลจะเป็นตัวเลขสองn
และในรูปแบบd
n,d
หลังจากนี้จะเป็นบรรทัดที่ประกอบด้วยพิกัดที่ระบุการเคลื่อนไหวที่ได้ทำไปแล้ว พิกัดจะแสดงรายการในแบบฟอร์ม: 1,1;2,2;3,3
. มุมซ้ายบนเป็นจุดกำเนิด (0,0 สำหรับ 2D) ในกรณีทั่วไปรายการนี้จะเป็นเช่น1,2,...,1,4;4,0,...,6,0;...
ที่หมายเลขแรกหมายถึงซ้ายขวา, ที่สองขึ้นลง, ที่สามผ่านมิติที่ 3 ฯลฯ โปรดทราบว่าพิกัดแรกคือตาX
แรกที่สอง เป็นO
เทิร์นแรก, ....
การป้อนข้อมูลจะถูกตามด้วยการขึ้นบรรทัดใหม่
ผลผลิต :
เอาต์พุตจะเป็น STDOUT เพียงระบุผู้ที่ชนะถ้ามีคนชนะหรือถ้ามันเสมอกัน ถ้ามันไม่ใช่เน็คไทหรือชนะอย่าเอาท์พุทอะไรเลย
นอกจากนี้ระบุว่ามีการปะทะกันของการย้ายนั่นคือถ้ามีการเคลื่อนไหวอย่างน้อยสองครั้งในตำแหน่งเดียวกัน
หากมีการชนะ / เสมอก่อนที่อินพุตจะสิ้นสุดลงโปรแกรมของคุณสามารถทำอะไรก็ได้ที่ต้องการ
กรณีทดสอบ (ทุกคนต้องการแนะนำอีกหรือไม่):
การป้อนข้อมูล:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
ตัวอย่างผลลัพธ์:
X wins
เอาต์พุตอื่นที่เป็นไปได้ (ต้องมีคำอธิบาย):
1
n
เคลื่อนที่เพื่อเป็นผู้ชนะ (ขออภัยที่ไม่ได้โพสต์คำพูดเหล่านี้ไว้ในกล่องทราย แต่ฉันไม่มีเวลาแม้แต่จะเห็นมันที่นั่นเพราะมันถูกโพสต์ในไม่ช้าหลังจาก sandboxing)