Tantangan ini adalah tentang permainan Tic Tac Toe, tetapi dimainkan dengan torus.
Cara bermain
Untuk membuat papan permainan yang diperlukan, Anda mulai dengan papan permainan Tic Tac Toe biasa. Pertama, lipat menjadi silinder dengan menyatukan sisi kiri dan kanan. Kemudian lipat menjadi torus dengan menyatukan ujung atas dan bawah. Berikut ini visualisasi sederhana papan permainan dengan beberapa gerakan yang dimainkan (Sick Paint skill!).
Aturan Tic Tac Toe pada torus adalah sama dengan Tic Tac Toe biasa. Setiap tempat pemain bergantian Xs dan Os. Yang pertama dengan 3 simbol yang sama berturut-turut, satu kolom atau satu dalam kemenangan diagonal.
Karena torus cukup sulit untuk divisualisasikan, kami hanya memproyeksikan papan kembali ke atas kertas. Sekarang kita bisa memainkan permainan sebagai Tic Tac Toe biasa. Satu-satunya perbedaan adalah, Anda juga bisa menang dengan 3 simbol yang sama dalam diagonal yang rusak. Misalnya Pemain 1 (X) memenangkan papan berikut. Anda dapat melihat ini dengan mudah dengan mengubah tampilan pada torus sedikit.
Jika tertarik, Anda dapat bermain Tic Tac Toe di Torus di Torus Games . Ada versi Windows, Mac, dan Android.
Game yang Optimal
Dalam tantangan ini tertarik pada game yang optimal. Game yang optimal adalah game, di mana kedua pemain memainkan strategi yang optimal. Pada papan permainan papan Tic Tac Toe reguler optimal selalu berakhir imbang. Menariknya di papan torus selalu pemain pertama yang menang. Bahkan permainan di papan torus tidak pernah bisa berakhir imbang (juga jika pemain bermain tidak optimal).
Strategi optimal sangat mudah:
- Jika Anda bisa menang dengan menempatkan simbol Anda, lakukanlah.
- Kalau tidak, jika lawan Anda memiliki dua simbol dalam satu baris / kolom / agonal, cobalah untuk memblokirnya. Kalau tidak, lakukan apa yang Anda inginkan.
- Kalau tidak, lakukan apa yang Anda inginkan.
Setiap permainan optimal terdiri dari 7 gerakan tepat dan gerakan ini dapat dijelaskan dengan cara berikut:
- Pemain 1 menempatkan X di mana saja di papan tulis (9 pilihan)
- Pemain 2 menempatkan O di mana saja di papan tulis (8 pilihan)
- Pemain 1 menempatkan X di mana saja di papan tulis (7 pilihan)
- Langkah Player 2 mungkin dipaksakan (1 pilihan), jika tidak, ia menempatkan O di mana saja (6 pilihan)
- Langkah pemain 1 dipaksa (1 pilihan)
- Player 2 terperangkap dalam garpu (Player 1 dapat menang dalam dua cara berbeda), jadi Player 2 harus memblokir Player 1 dalam satu cara (2 pilihan)
- Pemain 1 menempatkan langkah terakhir dan menang (1 pilihan)
Ada 9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728 game optimal berbeda di papan proyeksi kami. Di sini Anda dapat melihat satu permainan optimal yang khas:
Jika kita memberi label pada setiap sel papan dengan angka 0-8
, kita dapat menggambarkan game ini dengan angka 3518207
. X pertama adalah tempat di sel 3 (baris tengah, kolom kiri), daripada O di sel 5 (baris tengah, kolom kanan), daripada X di sel 1 (baris atas, kolom tengah), ...
Menggunakan notasi digit ini, kami secara otomatis membuat pesanan. Sekarang kita dapat mengurutkan semua game optimal 1728 dan kita mendapatkan daftar:
Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
...
Game 0674: 3518207
...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
...
Game 1726: 8765034
Game 1727: 8765043
Tantangan
Daftar ini adalah bagian dari pekerjaan Anda. Anda akan menerima satu nomor k
antara 0 dan 1727 dan Anda harus mengembalikan k
game ke-4 dalam notasi digit dari daftar yang diurutkan.
Tulis fungsi atau program, yang menerima angka k
(bilangan bulat) menghitung permainan koresponden. Anda dapat membaca input melalui STDIN, argumen baris perintah, prompt atau argumen fungsi dan mencetak hasilnya (7 digit) dalam format yang dapat dibaca (misalnya 0123845
atau [0, 1, 2, 3, 8, 4, 5]
) atau mengembalikannya menggunakan string (format yang dapat dibaca manusia) atau integer (berisi semua digit dalam basis 10), atau dalam format array / daftar apa pun.
Jenis tantangannya adalah kode-golf. Karenanya kode terpendek menang.
sumber
Jawaban:
JavaScript (ES6), 266
308 317 334 341Fungsi mengembalikan string. Sunting Ditemukan solusi aritmatika untuk fungsi M (akhirnya!)
Sangat naif
, bisa disingkat dengan banyak cara. Ini hanya menyebutkan semua nilai hukum yang mungkin dan mengembalikan apa yang ditemukan di tempat n. Fungsi M mengembalikan posisi di antara dua sel, yaitu gerakan wajib untuk memblokir pemain yang berlawanan.Lebih mudah dibaca
sumber
Oktaf,
467 369 363 309297 karakter297:
Satu-satunya perubahan yang relevan adalah bahwa kami tidak pernah memeriksa apakah pemain saat ini dapat menang, hanya memeriksa kemungkinan lawan untuk memenangkan giliran berikutnya . Karena satu-satunya putaran yang dapat dimenangkan pemain 1 adalah turn 7 , ini adalah satu-satunya tempat ketika algoritma akan menghasilkan permainan yang tidak optimal, tetapi sangat mudah untuk menyaring situasi seperti itu. Kami cukup memverifikasi setiap game yang dihasilkan jika dimenangkan oleh pemain 1 - jika tidak, langkah pada gilirannya 7 tidak benar, jadi kami tidak menambahkan game ini ke tabel game yang optimal.
(Persisnya setengah permainan yang dihasilkan oleh aturan ini salah, yaitu pada putaran ke-7 pemain 1 selalu memiliki dua kemungkinan untuk memblokir pemain dua, tetapi hanya satu yang akan membuatnya menang secara instan).
Menggunakan:
Kode ungolfed seperti:
sumber