Masalah:
Dalam catur, ada aturan yang cukup terkenal tentang menggambar dengan pengulangan. Jika posisi yang sama diulang 3 kali (atau lebih) maka pemain yang berniat untuk melakukan langkah yang akan menyebabkan pengulangan ini dapat mengklaim hasil seri.
Kadang-kadang ini adalah tugas yang mudah bagi seorang wasit untuk dikenali, jika beberapa gerakan terakhir hanyalah para pemain yang bergerak maju dan mundur. Kadang-kadang itu kurang sepele, ketika potongan telah bergerak secara signifikan antara posisi yang diulang.
Masalah dalam tantangan ini adalah untuk menghasilkan nilai yang benar jika posisi yang diklaim diundi oleh pengulangan (telah terlihat 3 kali atau lebih) dan nilai yang salah jika posisi yang diklaim tidak diundi oleh pengulangan, mengingat daftar gerakan dalam notasi koordinat seperti yang dijelaskan di bawah ini, atau notasi apa pun yang Anda pilih (tetapi Anda harus mengonversi kasus uji).
Apa itu posisi?
Dalam skenario dunia nyata, posisi akan dipengaruhi oleh hal-hal seperti apakah seorang pemain bisa bermain kastil atau apakah en-passant dimungkinkan; Anda seharusnya tidak mempertimbangkan ini dalam solusi Anda untuk masalah tersebut. Dalam masalah ini posisi didefinisikan hanya dengan konfigurasi potongan di papan tulis. Jadi, untuk keperluan masalah ini, dua posisi terlihat sama jika setiap kotak pada kedua papan ditempati oleh jenis potongan yang sama dengan warna yang sama. Ini tidak harus menjadi bagian yang tepat misalnya ksatria putih bisa bertukar kotak dan jika semua bagian lainnya memenuhi kriteria ini masih akan berada di posisi yang sama.
Seperti apa bentuk notasi yang valid?
Meskipun saya akan terus menjelaskan notasi koordinat, Anda bebas mengambil input oleh sistem notasi yang Anda pilih. Dengan ketentuan:
- Setiap item dalam notasi menggambarkan salah satu atau semua: bagian / potongan yang terlibat; apakah cek, skakmat, periksa, skakmat atau jalan buntu telah dikirimkan; jika penangkapan en-passant telah terjadi; posisi awal; posisi akhir.
- Anda mungkin tidak memiliki informasi tentang pengulangan dalam notasi Anda.
Jadi, selama kriteria ini dipenuhi, saya senang menerima, selama Anda menentukan dalam jawaban Anda, sistem notasi Anda. Ini bisa berupa 0 baris yang diindeks, tupel kolom atau apa pun yang masuk akal untuk program Anda.
Notasi Koordinat
Notasi koordinat adalah notasi yang murni menggambarkan gerakan sebagai sistem koordinat.
Langkah digambarkan sebagai pertama koordinat awal dari set {A1-H8}
dan kemudian tujuan mengoordinasikan lagi dari set yang sama. Jadi Gambit Raja akan terlihat seperti (sebagai kumpulan string)
{"E2-E4","E7-E5","F2-F4"}
Saya percaya ini adalah notasi terbaik untuk digunakan untuk masalah ini karena tidak dikotori dengan informasi asing seperti apakah cek telah terjadi atau apa jenis potongan bergerak. Seperti yang disebutkan sebelumnya notasi dapat menjadi pilihan Anda, sehingga Anda dapat menggunakan notasi lain misalnya notasi aljabar atau Anda dapat menyesuaikan notasi ini (mis. Hapus tanda hubung, atau ambil sebagai daftar tupel)
Aturan:
- Anda tidak boleh mempertimbangkan apakah suatu posisi atau perpindahan itu valid, hanya apakah itu menyebabkan pengulangan
- Anda dapat mengasumsikan bahwa promosi casting dan gadai tidak akan terjadi.
- Anda harus mengambil daftar string sebagai input dan output nilai kebenaran atau falsey yang sesuai dengan apakah pengulangan ketiga (atau lebih) telah terjadi pada langkah terakhir
- Permainan selalu dimulai pada posisi awal standar untuk catur. Posisi awal dapat diperhitungkan sebagai pengulangan.
- Draw by repetition belum terjadi jika posisi tidak diulang oleh langkah terakhir
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O standar , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Uji Kasus
Anda harus mengembalikan nilai kebenaran untuk:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
Dan nilai falsey untuk:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
posisi awal telah terjadi tiga kali.