Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Import potřebných knihoven
- import chess
- def simplify_fen_string(fen):
- """
- Zjednoduší FEN řetězec odstraněním informací o počtu tahů na konci.
- Tato funkce slouží k zjednodušení a standardizaci FEN řetězců.
- """
- parts = fen.split(' ')
- simplified_fen = ' '.join(parts[:4]) # Zachová základní informace o pozici
- return simplified_fen
- def evaluate_position(board):
- """
- Vyhodnotí danou pozici na šachovnici.
- Vrátí -1000 pro mat, 0 pro remízu a None, pokud hra stále pokračuje.
- """
- if board.is_checkmate():
- return -1000
- elif board.is_stalemate() or board.is_insufficient_material() or board.can_claim_draw():
- return 0
- else:
- return None
- def update_AR(board, AR):
- """
- Aktualizuje slovník AR s hodnoceními pozic na základě dostupných tahů.
- """
- changed = True
- while changed:
- changed = False
- for fen in list(AR.keys()):
- board.set_fen(fen)
- for move in board.legal_moves:
- board.push(move)
- new_fen = simplify_fen_string(board.fen())
- if new_fen not in AR:
- value = evaluate_position(board)
- AR[new_fen] = value
- changed = True
- board.pop()
- def print_draw_positions(AR):
- """
- Vytiskne všechny remízové pozice (hodnota 0) zaznamenané v slovníku AR.
- """
- print("Remízové pozice:")
- for fen, value in AR.items():
- if value == 0:
- print(f"FEN: {fen}, Hodnota: {value}")
- def main():
- """
- Hlavní funkce pro inicializaci, aktualizaci AR a výpis remízových pozic.
- """
- initial_fen = "8/2k5/8/1Q6/8/8/5K2/8 w - - 0 1"
- initial_fen = "8/8/8/8/8/8/5k1K/8 w - - 0 1"
- board = chess.Board(initial_fen)
- AR = {simplify_fen_string(initial_fen): evaluate_position(board)}
- update_AR(board, AR) # Aktualizuje AR s nově vyhodnocenými pozicemi
- print_draw_positions(AR) # Vytiskne všechny remízové pozice
- # Spuštění hlavní funkce
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement