Quantos movimentos de xadrez possíveis existem?
Começando da posição inicial padrão, quantos movimentos de xadrez legais possíveis existem nesta e em todas as posições seguintes?
Digamos, ignorando a posição inicial, um bispo pode se mover para 32 casas (mas o outro cobre os outros 32), uma torre para 64, se ambos os lados forem levados em consideração, os peões também podem alcançar todas as 64 casas, um cavalo , rei e a rainha também pode atingir todas as 64 posições.
Então, em suma, isso deve ser 384 combinações alvo-quadrado + peça de movimento total. Isso está correto?
Mas qual é o número de movimentos se a posição inicial não é ignorada?
Então, 16 avanços de passo duplo de peões devem ser adicionados, mais 4 movimentos de roque (2, rainha e lado do rei para cada jogador). E en passant, que deve ser 7 à esquerda e 7 à direita, vezes 2 para ambos os jogadores. E todas as combinações possíveis de quadrados de origem e destino de todas as outras peças!
Respostas
O rei branco pode mover para 8 campos dos 36 campos internos, para 4 campos dos 4 campos de canto e para 5 campos dos 24 campos de limite restantes. Isso dá 420 movimentos para o rei branco, adicione 2 para roque para chegar a 422. Se você distinguir as capturas, isso quase dobra (o roque não pode capturar) para 842. Agora, permitir que o rei preto dobre (1684)? Ou identificar movimentos que eles poderiam fazer (ou seja, todos, exceto roque - 844)?
Uma torre pode sempre (com linha de visão livre) mover-se para 14 casas. São 896 movimentos. Dobre para 1792 se você distinguir as capturas. Dobre novamente (3584) se quiser distinguir as cores.
Em uma diagonal (NW a SE, digamos) de comprimento n , um bispo pode fazer n ( n -1) movimentos (escolha um campo inicial e um campo final distinto). Some n = 1,2,3,4,5,6,7,8,7,6,5,4,3,2,1 (ou seja, ignorando a cor do bispo) para chegar a 280 movimentos, o dobro a 560 para contar as duas direções diagonais. Dobre (1120) se quiser distinguir as capturas, dobre mais uma vez (2240) se quiser distinguir por cor.
Para a rainha, basta adicionar a torre e o bispo, contando assim 1456, 2912 ou 5824 movimentos.
O cavalo normalmente pode fazer 8 movimentos, mas, como com o rei, temos que levar em conta o limite próximo. É mais fácil contar por direção: há 42 (6 por 7) campos de onde podemos ir dois para a direita e um para cima, digamos. Temos o mesmo número 42 (embora com campos diferentes) para todas as oito direções, portanto, um total de 336 movimentos de cavalos. Duplique (672) se você distinguir as capturas. Dobre novamente (1344) se você distinguir pela cor.
Um peão branco pode mover dois campos à frente de sua posição inicial (8 movimentos). Ele pode avançar das linhas 2 a 6 (40 movimentos). Ele pode avançar da linha 7 e ser promovido a rainha, torre, bispo ou cavalo (32 movimentos). Para os peões, devemos distinguir as capturas: em apenas sete das oito colunas, podemos capturar à direita, e em sete das oito colunas, podemos capturar à esquerda. Isso nos dá 70 movimentos de captura das linhas 2 a 6, mais 56 capturas com promoção. Até agora 206. Se você quiser distinguir a captura en passant de uma captura normal pelo mesmo movimento (campo inicial e final) do peão, adicione 14 para chegar a 220. Novamente, pelo menos para os peões, parece útil distinguir por jogador e chega em 440.
Em resumo, a maneira mais generosa de contar movimentos possíveis pode levar a 1684 + 3584 + 2240 + 5824 + 1344 + 440 = 15116 movimentos distintos. Pode-se aumentar o número ainda mais distinguindo movimentos que dão xeque ou mesmo xeque-mate, ou distinguindo as capturas de acordo com a peça capturada.
Se o tabuleiro for dado e apenas o quadrado de origem e de destino, bem como a escolha da promoção forem considerados (como no formato UCI ), então parece que haverá 1968 movimentos possíveis.
# 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)
O roque é considerado indicado movendo o rei dois passos.
Aqui estão todas as strings UCI possíveis e aqui está o código para gerá-las.