Ayo mainkan game Meta tic-tac-toe!
Ini adalah turnamen raja-of-the-hill dari Meta tic-tac-toe. Aturan Meta tic-tac-toe adalah sebagai berikut:
Semua aturan biasa dari tic-tac-toe berlaku.
Ada sembilan papan yang disusun untuk membuat satu papan induk. Seperti itu:
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
papan 0 mengacu pada papan kiri atas, papan 1 mengacu pada papan tengah atas ... seperti ini
0|1|2 ----- 3|4|5 ----- 6|7|8
Jika saya katakan papan 3, ubin 4, itu berarti ubin tengah papan di kiri tengah.
Anda hanya diperbolehkan bergerak di salah satu papan yang lebih kecil.
Jika Anda memenangkan salah satu papan yang lebih kecil, seluruh papan itu dihitung sebagai ubin Anda.
Jika salah satu papan terisi sebelum bot mana pun memenangkannya, itu dianggap sebagai ubin siapa-siapa.
Siapa pun yang menang dewan master akan menang!
Namun, ada twist penting. Katakanlah saya masuk papan 7, ubin 2. Itu artinya pada giliran Anda, Anda hanya bisa masuk papan 2. Lalu katakanlah Anda masuk papan 2, ubin 5. Sekarang, pada giliran saya, saya hanya bisa masuk papan 5. Katakanlah papan 1 penuh. (Tidak ada lagi tempat yang tersisa, atau salah satu dari kami telah memenangkan papan 1) Sekarang jika saya masuk ke papan 5, ubin 1, Anda dapat masuk ke papan yang Anda inginkan.
Aturan-aturan ini dapat dianggap sebagai:
- Anda harus bermain di papan sesuai dengan posisi yang dimainkan oleh pemain sebelumnya.
- Jika X bermain di papan 2, ubin 5; O harus bermain di papan 5
- Jika papan target penuh (seri) atau sudah memiliki pemenang, langkah selanjutnya tidak dibatasi.
- Papan dengan pemenang mungkin tidak dimainkan, bahkan pada gerakan yang tidak dibatasi.
Jika ini sedikit membingungkan, Anda dapat mencobanya online di sini. (pastikan untuk beralih dari "ubin pertama menang" ke "3 ubin berturut-turut")
Sekarang, inilah aturan tantangannya.
Anda harus menulis bot yang memainkan game ini.
Bot 1 adalah Xs, dan ia harus pergi dulu. Itu akan dipanggil dengan argumen baris perintah ini (tanpa barang di dalam tanda kurung):
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)
Karakter pertama mewakili siapa bot itu. Dalam hal ini, bot 1 bermain sebagai X. 9 baris berikutnya mengacu pada 9 papan. Baris ke-11 mengacu pada papan master. "Xx" adalah langkah terakhir. Sekarang, bot1 harus mencetak dua angka antara 0 dan 8. Angka 1 adalah papan tempat bot Anda bergerak, dan nomor 2 adalah ubin di papan tersebut. Pengontrol akan melacak langkah ini. Katakanlah bot 1 mencetak 38. Sekarang papan akan terlihat seperti ini:
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | |
dan bot2 akan dipanggil dengan argumen ini:
O --------- --------- --------- --------X --------- --------- --------- --------- --------- --------- 38
Sekarang bot 2 harus bergerak di papan 8 (karena bot1 menempatkan x di ubin 3). Katakanlah bot2 mencetak 84. Sekarang papan terlihat seperti ini.
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || |O| ----- || ----- || ----- | | || | | || | |
sekarang bot1 akan dipanggil dengan argumen ini:
X --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- 84
Sekarang bot1 harus bergerak di papan 4. Namun, bot1 adalah bot kecil yang nakal, dan memutuskan untuk bergerak di papan 3. Ia mencetak '30'. Papan tidak berubah sama sekali. Master bot melacak ini. Sekarang bot2 akan dipanggil dengan argumen ini:
O --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- xx
Sekarang bot 2 dapat pergi ke mana saja yang diinginkan (kecuali 38 dan 84, tentu saja). Ini berlanjut sampai seseorang memenangkan 3 dari papan master berturut-turut. Lalu, ada pertarungan kedua di mana bot2 adalah X dan bisa pergi dulu.
Ini berulang sampai setiap bot telah memainkan setiap bot lainnya.
Mencetak gol
Skor berfungsi seperti ini:
Pemenang setiap pertandingan mendapat 100 + number of open spots
poin. Dengan begitu, lebih berharga jika bot Anda menang dengan cepat. Setiap kali bot Anda membuat langkah yang tidak valid, itu kehilangan 1 poin. Jika setelah 250 putaran, tidak ada bot yang menang, masing-masing bot kehilangan 10 poin, dan kami melanjutkan ke putaran berikutnya.
Semuanya akan dimasukkan ke dalam direktori yang berisi
Bot pengontrol. Ini adalah program C ++ yang saya tulis. Anda dapat melihat kode sumber bot pengontrol di sini. Tolong beri tahu saya jika Anda melihat sesuatu yang tidak beres dengan controller.
File teks bernama File
instructions.txt
ini akan terlihat seperti ini:[Total number of bots that are competing] [bot1Name] [bot1 command to run] [bot2Name] [bot2 command to run] ...
Folder untuk setiap bot. Folder ini akan menampung program Anda (Apakah itu skrip atau biner) dan SATU file teks bernama
data.txt
bahwa bot Anda dapat membaca dan menulis apa pun yang diinginkannya.
Spesifikasi teknis dan klarifikasi aturan
Bot apa pun yang mencoba membaca / menulis sesuatu dari mana saja yang tidak ada di dalam foldernya akan ditendang dari permainan.
Program Anda harus dapat berjalan di macbook yang menjalankan Yosemite. Bahasa yang didukung saat ini adalah python (2.7.9 dan 3.4.2), C / C ++, objektif-C, perl, ruby, bash, PHP, Java, C #, javascript dan Haskell. Ada banyak lagi, tetapi ini hanya yang dapat saya pikirkan saat ini. Saya akan menambahkan lebih banyak seiring berjalannya waktu. Jika Anda ingin berkompetisi dalam bahasa tertentu, pesan saya atau komentar, dan saya akan menambahkannya ke daftar jika memungkinkan.
Jika papan dimenangkan, tetapi masih ada ruang, Anda masih tidak bisa pindah ke salah satu tempat terbuka.
Perhatikan bahwa direktori kerja kiriman Anda akan menjadi direktori yang berisi pengontrol dan semua bot lainnya, BUKAN direktori yang berisi bot Anda.
Silakan kirim bersama dengan kode bot pengontrol Anda perintah yang benar untuk dikompilasi (jika ada) dan untuk menjalankan bot Anda. Sebagian besar ini akan dilakukan dari terminal OS X, yang cukup mirip dengan terminal linux.
Bot harus diisi kurang dari satu detik. Sayangnya, saya tidak cukup kompeten untuk menambahkan timer ke bot pengontrol. Namun, saya akan mengatur waktu bot secara manual.
Hasil!
Ya, saya benar. Saya lupa membuat bot pengontrol memeriksa untuk melihat apakah masterBoard penuh. Jika masterBoard penuh, maka SETIAP gerakan tidak valid, tetapi terus memanggil bot, yang mungkin mengapa ada begitu banyak gerakan tidak valid. Saya sudah memperbaikinya sekarang. Ini adalah hasil resmi dengan versi terbaru dari semua bot.
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.
Bot Kedalaman adalah juara bertahan! Setidaknya, untuk saat ini.
XXX000---
ditransmisikan? atau apakah 'tidak ada yang mendapatkannya meskipun O telah memenangkannya pertama'?