Latar Belakang
Mu Torere adalah permainan yang merupakan satu dari hanya dua yang diketahui dimainkan oleh orang-orang Maori Selandia Baru sebelum pengaruh Eropa. Ini membuatnya menjadi game yang sangat unik karena memiliki "kriteria kemenangan objektif" dan aturan main yang berbeda dari kebanyakan game lain yang ada.
Gameplay:
Papan adalah segi delapan. Ada koneksi antara masing-masing simpul yang berdekatan, dan ada simpul tengah yang terhubung ke semua simpul. Kapan saja, delapan dari sembilan node ditempati oleh batu. Pada awalnya, ada empat batu putih dan empat batu hitam yang masing-masing mengambil setengah dari segi delapan, dengan simpul tengah kosong. Hitam bergerak lebih dulu.
Setiap belokan, pemain dapat memindahkan salah satu batunya di sepanjang salah satu dari 16 tepi dari satu simpul ke simpul kosong. Sebuah batu hanya bisa dipindahkan dari simpul luar ke simpul tengah jika batu itu berada di sebelah batu lawan.
Seorang pemain kehilangan ketika dia tidak dapat melakukan langkah hukum, yang terjadi ketika tidak ada ujung yang menghubungkan batu ke simpul kosong.
Berikut adalah situs web yang menjelaskan aturan (dengan diagram) dan menawarkan beberapa analisis.
Tantangan
Tantangan Anda adalah menulis program terpendek yang dapat memainkan permainan Mu Torere yang sempurna melawan lawan manusia. Program Anda harus dapat menampilkan dan memperbarui papan permainan, melakukan gerakan dan menerima gerakan dari lawan manusia. Yang paling penting, itu harus memainkan permainan yang sempurna.
Game Sempurna?
Ya, game sempurna. Saya telah melakukan beberapa analisis gim, dan saya menemukan bahwa gim ini bertahan selama waktu tak terbatas jika dimainkan dengan sempurna oleh kedua belah pihak. Ini berarti program Anda tidak boleh hilang. Selain itu, program Anda harus dapat memaksa menang setiap kali lawan manusia melakukan kesalahan yang memungkinkan program untuk memaksa menang. Adapun cara program Anda menemukan langkah yang sempurna, ini terserah Anda.
Detail
Setelah setiap gerakan (dan di awal permainan), program Anda harus mencetak papan permainan. Namun Anda memilih untuk menampilkan papan, itu harus menunjukkan semua node dan sepenuhnya terhubung (semua 16 jalur koneksi harus ditarik tanpa garis silang). Pada awalnya, papan harus memiliki posisi awal yang benar. Salah satu cara untuk mencapai ini adalah dengan membuat papan permainan persegi.
w-w-w
|\|/|
b-o-w
|/|\|
b-b-b
Dua warna tersebut adalah hitam dan putih, atau gelap / terang. Papan harus menunjukkan simpul mana yang ditempati oleh potongan pemain mana, seperti menandainya dengan "b" atau "w", dan simpul mana yang kosong. Peserta didorong (tetapi tidak diharuskan) untuk membuat papan permainan lebih grafis, daripada teks biasa.
Papan permainan Anda harus memiliki sistem penomoran yang memberikan setiap simpul nomor unik. Anda dapat memilih untuk memberi nomor papan apa saja yang Anda suka, tetapi harus dijelaskan dalam jawaban Anda atau oleh program. Papan kotak dapat diberi nomor sebagai berikut:
1-2-3
|\|/|
4-5-6
|/|\|
7-8-9
Manusia adalah yang pertama bergerak. Masukannya akan menjadi satu nomor. Ini akan menjadi jumlah simpul di mana batu yang dipindahkan saat ini berada. Jika saya ingin memindahkan batu dari simpul 4 ke simpul kosong 5, saya akan mengetikkan a 4
. 5 tersirat karena merupakan satu-satunya simpul kosong.
Asumsikan bahwa manusia akan selalu membuat langkah hukum.
Setelah manusia bergerak, papan yang diperbarui harus dicetak. Setelah program Anda memutuskan langkah hukum, itu akan mencetak papan lain yang diperbarui, dan kemudian menunggu manusia untuk masuk ke langkah lain.
Program Anda harus berakhir setelah menang.
Catatan
Aturan golf kode standar berlaku, tidak boleh mengakses file eksternal, dll., Dll. Selain itu, saya akan menetapkan batas waktu fleksibel 15 detik (pada mesin yang masuk akal) agar program Anda membuat setiap gerakannya. Seperti yang dinyatakan, permainan ini memiliki kemungkinan untuk membentuk loop tak terbatas, dan saya tidak ingin pencarian mendalam-pertama masuk ke loop tak terbatas.
Jawaban:
Ruby, 390 karakter
Implementasi dalam ruby yang secara langsung menghitung pohon permainan (yang membutuhkan beberapa kode) dan karenanya selalu bermain secara optimal. Posisi papan berputar ke luar seperti yang ditunjukkan pada gambar berikut:
sumber
bash and friends (
463447 karakter)Manusia berperan sebagai
b
komputerw
. Posisi dewan diberi nomor seperti pada dokumen di sini di bagian atas. Ternyata heuristik untuk memainkan permainan yang sempurna ternyata sangat sederhana.Di sisi lain, kehilangan jalan yang menarik cukup sulit. http://ideone.com/sXJPy menunjukkan kemungkinan bunuh diri sesingkat mungkin terhadap bot ini. Perhatikan bahwa 0 ekstra di akhir adalah untuk menguji apakah ia keluar dari loop dengan benar.
sumber
read x
wajib, tapi itu akan membuat pengujian cukup membuat frustrasi. Saya juga bisa menyelamatkan karakter dengan menghapus garis kosong setelah papan, tapi ...