Advertisement
max2201111

petr OK half-moves

Mar 23rd, 2024
583
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.73 KB | Science | 0 0
  1. import chess
  2.  
  3. def simplify_fen_string(fen):
  4.     parts = fen.split(' ')
  5.     simplified_fen = ' '.join(parts[:4])
  6.     return simplified_fen
  7.  
  8. def is_mate_in_k_moves(board, k):
  9.     if k == 0:
  10.         return board.is_checkmate()
  11.    
  12.     if board.is_game_over():
  13.         return False
  14.  
  15.     for move in board.legal_moves:
  16.         board.push(move)
  17.         if is_mate_in_k_moves(board, k - 1):
  18.             board.pop()
  19.             return True
  20.         board.pop()
  21.    
  22.     return False
  23.  
  24. def update_AR_for_mate_in_k(board, AR, max_k):
  25.     for k in range(1, max_k + 1):
  26.         for fen in list(AR.keys()):
  27.             board.set_fen(fen)
  28.             if AR[fen] is None:
  29.                 if is_mate_in_k_moves(board, k):
  30.                     # Hráč na tahu může vynutit mat v 'k' tazích
  31.                     AR[fen] = 1000 - k
  32.                     continue
  33.                 board.turn = not board.turn
  34.                 if is_mate_in_k_moves(board, k):
  35.                     # Hráč na tahu může být matován v 'k' tazích
  36.                     AR[fen] = -1000 + k
  37.                 board.turn = not board.turn
  38.  
  39. def evaluate_initial_positions(board):
  40.     AR = {}
  41.     initial_fen = board.fen()
  42.     simplified_fen = simplify_fen_string(initial_fen)
  43.     AR[simplified_fen] = None
  44.     return AR
  45.  
  46. def main():
  47.     initial_fen = "8/8/8/3Q4/8/2k5/7K/8 w - - 0 1"  # Standardní šachová pozice
  48.     board = chess.Board(initial_fen)
  49.     AR = evaluate_initial_positions(board)
  50.  
  51.     # Nastavte max_k na maximální počet tahů, do kterých chcete mat hledat
  52.     max_k = 17
  53.     update_AR_for_mate_in_k(board, AR, max_k)
  54.  
  55.     for fen, value in AR.items():
  56.         print(f"FEN: {fen}, Hodnota: {value}")
  57.  
  58. if __name__ == "__main__":
  59.     main()
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement