Ada berapa banyak kemungkinan gerakan catur?
Mulai dari posisi awal standar, berapa banyak kemungkinan gerakan catur legal yang ada di posisi ini dan semua kemungkinan posisi berikutnya?
Katakanlah, mengabaikan posisi awal, seorang uskup dapat pindah ke 32 kotak (tetapi yang lain menutupi 32 lainnya), benteng menjadi 64, jika kedua sisi diperhitungkan, bidak juga dapat mencapai 64 kotak, kesatria , raja dan ratu juga dapat mencapai 64 posisi.
Jadi, totalnya, itu seharusnya adalah 384 kombinasi bujur sangkar-target bergerak total. Apakah ini benar?
Tetapi berapa jumlah gerakan jika posisi awal tidak diabaikan?
Kemudian, 16 kemajuan pion dua langkah harus ditambahkan, ditambah 4 gerakan kastil (2, ratu dan sisi raja untuk setiap pemain). Dan en passant, yang seharusnya 7 kiri dan 7 kanan, dikalikan 2 untuk kedua pemain. Dan semua kemungkinan kombinasi kuadrat target-sumber dari semua bagian lainnya!
Jawaban
Raja putih dapat berpindah ke 8 bidang dari 36 bidang dalam, ke 4 bidang dari 4 bidang sudut dan ke 5 bidang dari 24 bidang batas yang tersisa. Itu berarti 420 gerakan untuk raja putih, tambahkan 2 untuk kastil agar mencapai 422. Jika Anda membedakan tangkapan, ini hampir dua kali lipat (kastil tidak bisa menangkap) menjadi 842. Sekarang biarkan raja hitam menggandakan ini (1684)? Atau mengidentifikasi gerakan yang mereka berdua bisa lakukan (yaitu, semua kecuali rokade - 844)?
Benteng selalu (jika diberi jarak pandang) selalu bisa pindah ke 14 kotak. Itu 896 gerakan. Gandakan menjadi 1792 jika Anda membedakan tangkapan. Gandakan lagi (3584) jika ingin membedakan warna.
Pada diagonal (NW ke SE, katakanlah) dengan panjang n , uskup dapat membuat n ( n -1) bergerak (pilih bidang awal dan bidang akhir yang berbeda). Jumlahkan n = 1,2,3,4,5,6,7,8,7,6,5,4,3,2,1 (yaitu, mengabaikan warna uskup) untuk sampai pada 280 gerakan, gandakan ke 560 untuk menghitung kedua arah diagonal. Gandakan (1120) jika Anda ingin membedakan tangkapan, gandakan sekali lagi (2240) jika Anda ingin membedakan berdasarkan warna.
Untuk ratu cukup tambahkan benteng dan uskup, sehingga menghitung 1456, 2912, atau 5824 langkah.
Ksatria biasanya dapat membuat 8 gerakan, tetapi seperti raja kita harus memperhitungkan batas terdekat. Lebih mudah menghitung dengan arah: Ada 42 (6 kali 7) bidang dari mana kita bisa pergi dua ke kanan dan satu ke atas, katakanlah. Kami memiliki nomor yang sama 42 (meskipun dengan medan yang berbeda) untuk kedelapan arah, maka total 336 ksatria bergerak. Ganda (672) jika Anda membedakan tangkapan. Gandakan lagi (1344) jika Anda membedakan berdasarkan warnanya.
Bidak putih dapat bergerak dua bidang ke depan dari posisi awalnya (8 langkah). Itu dapat bergerak maju dari baris 2 ke 6 (40 gerakan). Itu dapat bergerak maju dari baris 7 dan mempromosikan menjadi ratu, benteng, uskup, atau ksatria (32 langkah). Untuk bidak, kita harus membedakan tangkapan: Hanya dalam tujuh dari delapan kolom, kita dapat menangkap ke kanan, dan dalam tujuh dari delapan kolom kita dapat menangkap ke kiri. Ini memberi kita 70 gerakan penangkapan dari baris 2 ke 6, ditambah 56 penangkapan dengan promosi. Sejauh ini 206. Jika Anda ingin membedakan tangkapan en passant dari tangkapan normal dengan gerakan yang sama (bidang awal dan akhir) dari bidak, tambahkan 14 untuk sampai pada 220. Sekali lagi, setidaknya untuk bidak, tampaknya berguna untuk dibedakan berdasarkan pemain dan tiba di 440.
Singkatnya, cara paling murah hati untuk menghitung kemungkinan gerakan mungkin menghasilkan 1684 + 3584 + 2240 + 5824 + 1344 + 440 = 15116 gerakan berbeda. Seseorang dapat menaikkan angka lebih tinggi dengan membedakan gerakan yang memberikan cek atau bahkan sekakmat, atau dengan membedakan tangkapan sesuai dengan bidak yang ditangkap.
Jika papan diberikan dan hanya kotak sumber dan target, serta pilihan promosi yang dipertimbangkan (seperti dalam format UCI ), maka tampaknya akan ada 1968 kemungkinan pergerakan.
# Python
# pip install python-chess
import chess
moves = 0
# Queen, covers all lines and diagonals
for x in range(8):
for y in range(8):
board = chess.Board("8/8/8/8/8/8/8/8")
board.set_piece_at(chess.square(x,y), chess.Piece(chess.QUEEN, chess.WHITE))
moves += len(list(board.generate_legal_moves()))
# Knight jumps
for x in range(8):
for y in range(8):
board = chess.Board("8/8/8/8/8/8/8/8")
board.set_piece_at(chess.square(x,y), chess.Piece(chess.KNIGHT, chess.WHITE))
moves += len(list(board.generate_legal_moves()))
# Straight pawn promotions, 2 players, 8 ranks each, 4 choices (queen, rook, bishop, knight)
moves += 2*8*4
# Diagonal pawn promotions, when capturing a piece
# 2 players, 14 diagonals (12 in the center and 1 each in the first and last ranks), 4 choices
moves += 2*14*4
print(moves)
Castling diasumsikan diindikasikan dengan menggerakkan raja dua langkah.
Berikut semua kemungkinan string UCI dan berikut adalah kode untuk menghasilkannya.