Kaç tane olası satranç hamlesi var?

Dec 13 2020

Standart ilk konumdan başlayarak, bu ve tüm olası sonraki konumlarda kaç olası yasal satranç hamlesi vardır?

Diyelim ki, başlangıç ​​pozisyonunu göz ardı ederek, bir fil 32 kareye gidebilir (ancak diğeri diğer 32 kareyi kaplar), 64 kareye, her iki taraf da hesaba katılırsa, piyonlar da 64 karenin tümüne, bir ata , şaha ve vezir de 64 pozisyonun tamamına ulaşabilir.

Sonuç olarak, toplam 384 hareket hedef-kare + parça kombinasyonu olmalıdır. Bu doğru mu?

Fakat başlangıç ​​pozisyonu göz ardı edilmezse hamle sayısı nedir?

Ardından, 16 piyon çift adımlı ilerlemenin yanı sıra 4 rok hamlesi (her oyuncu için 2, vezir ve şah kanadı) eklenmelidir. Ve geçerken, her iki oyuncu için 7 sol ve 7 sağ, çarpı 2 olmalıdır. Ve diğer tüm parçaların tüm olası kaynak-hedef kare kombinasyonları!

Yanıtlar

3 HagenvonEitzen Dec 13 2020 at 19:03

Beyaz şah, içteki 36 alandan 8 alana, 4 köşe alanından 4 alana ve kalan 24 sınır alanından 5 alana gidebilir. Bu, beyaz şah için 420 hamle, 422'ye ulaşmak için roklar için 2 ekleyin. Yakalamaları ayırt ederseniz, bu neredeyse ikiye katlanarak (rok yakalayamaz) 842'ye çıkar. Şimdi siyah şahın bunu ikiye katlamasına izin verin (1684)? Ya da her ikisinin de yapabileceği hamleleri tanımlayın (yani rok atma hariç tümü - 844)?

Bir kale her zaman (serbest görüş açısı verildiğinde) 14 kareye gidebilir. Bu 896 hamle. Yakalamaları ayırt ederseniz iki katına 1792. Rengi ayırt etmek istiyorsanız tekrar ikiye katlayın (3584).

N uzunluğunda diyagonal (kuzeybatıdan güneydoğuya) bir fil, n ( n -1) hamle yapabilir (bir başlangıç ​​alanı ve farklı bir bitiş alanı seçin). Toplam n = 1,2,3,4,5,6,7,8,7,6,5,4,3,2,1 (yani filin rengini görmezden gelerek) 280 hamleye ulaşmak için, çift her iki çapraz yönü saymak için 560'a kadar. Yakalamaları ayırt etmek istiyorsanız çift (1120), renge göre ayırt etmek istiyorsanız bir kez daha ikiye katlayın (2240).

Vezir için basitçe kale ve fil ekleyin, böylece 1456, 2912 veya 5824 hamle sayın.

At tipik olarak 8 hamle yapabilir, ancak şahta olduğu gibi yakındaki sınırı hesaba katmalıyız. Yöne göre saymak daha kolaydır: Örneğin iki sağa ve bir yukarı gidebileceğimiz 42 (6'ya 7) alan var. Sekiz yönün tamamı için aynı 42 numaraya sahibiz (farklı alanlara sahip), dolayısıyla toplam 336 at hamlesine sahibiz. Yakalamaları ayırt ederseniz çift (672). Rengi ayırt ederseniz tekrar ikiye katlayın (1344).

Beyaz bir piyon, başlangıç ​​konumundan iki alan ileri hareket ettirebilir (8 hamle). 2. sıradan 6. sıraya kadar bir ileri gidebilir (40 hareket). 7. sıradan ileri gidebilir ve vezir, kale, fil veya ata yükselebilir (32 hamle). Piyonlar için, yakalamaları ayırt etmeliyiz : Sekiz sütunun sadece yedisinde, sağda ve sekiz sütunun yedisinde solda yakalayabiliriz. Bu bize 2. sıradan 6. sıraya kadar 70 yakalama hareketi ve ayrıca terfi ile 56 yakalama sağlıyor. Şu ana kadar 206. Eğer geçerken ele geçirmeyi normal bir yakalamadan piyonun aynı hareketiyle (başlangıç ​​ve bitiş alanı) ayırmak istiyorsanız, 220'ye varmak için 14 ekleyin. ve 440'a varıyoruz.

Özetle, olası hamleleri saymanın en cömert yolu, 1684 + 3584 + 2240 + 5824 + 1344 + 440 = 15116 farklı harekete yol açabilir . Şah, hatta şah mat veren hareketleri ayırt ederek veya yakalanan parçaya göre yakalamaları ayırt ederek sayı daha da yükseltilebilir.

2 2080 Jan 12 2021 at 05:06

Eğer pano verilirse ve sadece kaynak ve hedef kare ile terfi seçimi dikkate alınırsa ( UCI formatında olduğu gibi), o zaman 1968 olası hamle olacağı görülür.

# 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'in şahı iki adım hareket ettirerek gösterileceği varsayılır.

İşte tüm olası UCI dizeleri ve burada onları üretmek için koddur.