ให้เล่นเกม Meta tic-tac-toe!
นี่คือการแข่งขันคิงส์ออฟเดอะฮิลล์ของ Meta tic-tac-toe กฎของ Meta tic-tac-toe มีดังนี้:
ใช้กฎปกติทั้งหมดของโอเอกซ์
มีเก้ากระดานที่จัดทำขึ้นเพื่อเป็นหนึ่งในคณะกรรมการหลัก ชอบมาก
0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8
บอร์ด 0 หมายถึงกระดานซ้ายบน, กระดาน 1 หมายถึงกระดานกลางด้านบน ... เช่นนี้
0|1|2 ----- 3|4|5 ----- 6|7|8
ถ้าผมบอกว่าบอร์ด 3, ไทล์ 4, นั่นหมายถึงไทล์ของบอร์ดตรงกลางซ้าย
คุณได้รับอนุญาตเท่านั้นที่จะย้ายในหนึ่งในบอร์ดขนาดเล็ก
หากคุณชนะกระดานใดกระดานหนึ่งที่มีขนาดเล็กลงกระดานทั้งหมดนั้นจะนับว่าเป็นไทล์ของคุณ
หากบอร์ดใดบอร์ดหนึ่งเต็มก่อนที่บอทจะชนะก็จะนับว่าเป็นไพ่โนบิทอล
ใครก็ตามที่ชนะบอร์ดมาสเตอร์จะเป็นผู้ชนะ!
อย่างไรก็ตามมีการบิดที่สำคัญ สมมติว่าผมไปในกระดานที่ 7 กระเบื้อง 2. นั่นหมายความว่าในทางกลับกันคุณสามารถเพียงไปในกระดาน 2. จากนั้นสมมติว่าคุณไปในกระดานที่ 2, กระเบื้อง 5. ตอนนี้เกี่ยวกับการเปิดของฉันฉันสามารถเท่านั้นไปในกระดาน 5 สมมติว่าบอร์ด 1 เต็มแล้ว (ไม่มีสปอตเหลืออีกหรือเราหนึ่งคนชนะบอร์ด 1) ตอนนี้ถ้าฉันไปที่บอร์ด 5, ไทล์ 1 คุณสามารถไปที่บอร์ดใดก็ได้ที่คุณต้องการ
กฎเหล่านี้ถือได้ว่า:
- คุณต้องเล่นในกระดานที่สอดคล้องกับตำแหน่งที่เล่นโดยผู้เล่นก่อนหน้า
- ถ้า X เล่นในบอร์ด 2 ให้ไทล์ 5; O ต้องเล่นในบอร์ด 5
- หากบอร์ดเป้าหมายเต็ม (เสมอ) หรือมีผู้ชนะอยู่แล้วการเคลื่อนไหวครั้งต่อไปจะไม่มีข้อ จำกัด
- บอร์ดที่มีผู้ชนะอาจไม่สามารถเล่นได้แม้ว่าจะอยู่ในสภาพที่ไม่มีข้อ จำกัด
หากนี่สับสนเล็กน้อยคุณสามารถลองออนไลน์ได้ที่นี่(ตรวจสอบให้แน่ใจว่าได้เปลี่ยนจาก "ไทล์แรกชนะ" เป็น "3 ไทล์ในแถว")
ตอนนี้นี่คือกฎของการท้าทาย
คุณต้องเขียนบอทที่เล่นเกมนี้
บอท 1 คือ X และมันจะไปก่อน มันจะถูกเรียกด้วยอาร์กิวเมนต์บรรทัดคำสั่งเหล่านี้ (โดยไม่มีเนื้อหาในวงเล็บ):
X (whose turn) --------- (board 0) --------- (board 1) --------- (board 2) --------- (board 3) --------- (board 4) --------- (board 5) --------- (board 6) --------- (board 7) --------- (board 8) --------- (master board) xx (last move)
อักขระตัวแรกแสดงว่าบอทคือใคร ในกรณีนี้บ็อต 1 เล่นเป็น X 9 บรรทัดถัดไปหมายถึง 9 บอร์ด บรรทัดที่ 11 หมายถึงบอร์ดหลัก "xx" คือการเคลื่อนไหวครั้งสุดท้าย ตอนนี้ bot1 ต้องพิมพ์ตัวเลขสองตัวระหว่าง 0 ถึง 8 หมายเลข 1 คือกระดานที่บอทของคุณกำลังเคลื่อนที่และหมายเลข 2 คือไพ่ในบอร์ดดังกล่าว ผู้ควบคุมจะติดตามการเคลื่อนไหวนี้ สมมุติว่า bot 1 พิมพ์ 38 ตอนนี้บอร์ดก็จะเป็นแบบนี้:
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | |
และ bot2 จะถูกเรียกด้วยอาร์กิวเมนต์เหล่านี้:
O --------- --------- --------- --------X --------- --------- --------- --------- --------- --------- 38
ตอนนี้บอท 2 ต้องย้ายไปอยู่ในบอร์ด 8 (เพราะบอท 1 วาง x ลงในไทล์ 3) สมมุติว่า bot2 พิมพ์ 84 ทีนี้บอร์ดก็เป็นแบบนี้
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || |O| ----- || ----- || ----- | | || | | || | |
ตอนนี้ bot1 จะถูกเรียกด้วยอาร์กิวเมนต์เหล่านี้:
X --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- 84
ตอนนี้ bot1 ต้องย้ายไปอยู่ในบอร์ด 4 อย่างไรก็ตาม bot1 เป็นบอตตัวน้อยซุกซนและตัดสินใจที่จะย้ายเข้ามาในบอร์ด 3 มันพิมพ์ '30' คณะกรรมการจะไม่เปลี่ยนแปลงเลย บอทต้นแบบคอยติดตามสิ่งนี้ ตอนนี้ bot2 จะถูกเรียกด้วยอาร์กิวเมนต์เหล่านี้:
O --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- xx
ตอนนี้บอท 2 สามารถไปได้ทุกที่ที่ต้องการ (ยกเว้นสำหรับ 38 และ 84 แน่นอน) สิ่งนี้จะดำเนินต่อไปจนกว่าจะมีใครชนะ 3 ของบอร์ดหลักในแถว จากนั้นมีคู่ที่สองที่ bot2 คือ X และเริ่มต้นก่อน
การทำซ้ำนี้จนกว่าบอทเดียวจะเล่นบอทอื่น ๆ
เกณฑ์การให้คะแนน
การให้คะแนนทำงานเช่นนี้:
ผู้ชนะการแข่งขันแต่ละคนจะได้รับ100 + number of open spots
คะแนน ด้วยวิธีนี้จะมีค่ามากกว่าหากบอตของคุณชนะอย่างรวดเร็ว ทุกครั้งที่บอทของคุณเคลื่อนที่ไม่ถูกต้องจะเสีย 1 คะแนน ถ้าหลังจาก 250 รอบบอทไม่ชนะแต่ละบอทจะแพ้ 10 คะแนนและเราจะไปรอบต่อไป
ทุกอย่างจะถูกใส่ไว้ในไดเรกทอรีที่มี
บอควบคุม นี่คือโปรแกรม C ++ ที่ฉันเขียน คุณสามารถดูรหัสแหล่งบอควบคุมได้ที่นี่ โปรดแจ้งให้เราทราบหากคุณเห็นสิ่งที่ไม่ถูกต้องกับคอนโทรลเลอร์
ไฟล์ข้อความชื่อไฟล์
instructions.txt
นี้จะมีลักษณะดังนี้:[Total number of bots that are competing] [bot1Name] [bot1 command to run] [bot2Name] [bot2 command to run] ...
โฟลเดอร์สำหรับแต่ละบอท โฟลเดอร์นี้จะเก็บโปรแกรมของคุณ (ไม่ว่าจะเป็นสคริปต์หรือไบนารี) และไฟล์ข้อความหนึ่งชื่อ
data.txt
ที่บอตของคุณสามารถอ่านและเขียนสิ่งที่ต้องการ
ข้อกำหนดทางเทคนิคและการชี้แจงกฎ
บอทใด ๆ ที่พยายามอ่าน / เขียนบางสิ่งจากที่ใดก็ตามที่ไม่อยู่ในโฟลเดอร์จะถูกเตะออกจากเกม
โปรแกรมของคุณจะต้องสามารถทำงานบน macbook ที่ใช้โยเซมิตีได้ ภาษาที่รองรับในปัจจุบัน ได้แก่ python (2.7.9 และ 3.4.2), C / C ++, Object-C, perl, ruby, bash, PHP, Java, C #, javascript และ Haskell มีอีกมากมาย แต่สิ่งเหล่านี้เป็นเพียงสิ่งที่ฉันนึกได้ตอนนี้ ฉันจะเพิ่มมากขึ้นเมื่อเวลาผ่านไป หากคุณต้องการแข่งขันในภาษาใดข้อความหนึ่งให้ฉันหรือแสดงความคิดเห็นและฉันจะเพิ่มลงในรายการถ้าเป็นไปได้
หากบอร์ดชนะ แต่มีพื้นที่ว่างคุณจะไม่สามารถย้ายไปยังจุดที่เปิดโล่งแห่งใดแห่งหนึ่งได้
โปรดทราบว่าไดเรกทอรีทำงานของการส่งของคุณจะเป็นไดเรกทอรีที่มีตัวควบคุมและบอตอื่น ๆ ทั้งหมดไม่ใช่ไดเรกทอรีที่มีบอทของคุณ
กรุณาโพสต์พร้อมกับรหัสบอควบคุมของคุณคำสั่งที่ถูกต้องในการรวบรวม (ถ้ามี) และเรียกใช้บอทของคุณ ส่วนใหญ่จะทำจากเทอร์มินัล OS X ซึ่งค่อนข้างคล้ายกับเทอร์มินัลลินุกซ์
บอตจะต้องเสร็จสิ้นภายในไม่กี่วินาที น่าเสียดายที่ฉันไม่ค่อยเก่งพอที่จะเพิ่มตัวจับเวลาลงในบ็อตคอนโทรลเลอร์ อย่างไรก็ตามฉันจะตั้งเวลาบอทด้วยตนเอง
ผล!
ฉันพูดถูก ฉันลืมที่จะทำการบอตตัวควบคุมเพื่อตรวจสอบว่ามาสเตอร์เต็มหรือไม่ หากมาสเตอร์บอร์ดเต็มแล้วการเคลื่อนไหวทุกครั้งจะไม่ถูกต้อง แต่มันจะเรียกบอตต่อไปซึ่งอาจเป็นสาเหตุที่ทำให้มีการเคลื่อนไหวที่ไม่ถูกต้องมากมาย ฉันได้รับการแก้ไขแล้ว นี่คือผลการแข่งขันอย่างเป็นทางการกับเวอร์ชั่นล่าสุดของบอททั้งหมด
Bot 1, goodRandBot, has 1 wins and made 0 illegal moves, for a total of 133 points.
Bot 2, naiveBot, has 3 wins and made 48 illegal moves, for a total of 361 points.
Bot 3, depthBot, has 5 wins and made 0 illegal moves, for a total of 664 points.
Bot 4, middleBot, has 1 wins and made 20 illegal moves, for a total of 114 points.
With 4 bots, This program took 477.471 seconds to finish.
บอทลึกเป็นแชมป์ที่ครองราชย์! อย่างน้อยตอนนี้
XXX000---
ได้รับการถ่ายทอดอย่างไร หรือว่า 'ไม่มีใครได้รับแม้ O จะได้รับมันก่อน'?