Reinitialize repository and add working move generation for all pieces

This commit is contained in:
Moritz Eigenauer 2025-11-12 17:01:12 +01:00
commit 951a8bbec6
28 changed files with 3373 additions and 0 deletions

View file

@ -0,0 +1,60 @@
#!/usr/bin/env python3
def generate_king_attacks():
"""
Generates a list of 64 u64 bitboards, where each bitboard represents
the squares a king can attack from a given source square.
Uses Little-Endian File-Rank (LEFR) mapping: A1=0, H1=7, A2=8, ..., H8=63.
"""
all_attacks = []
# All 8 possible king move offsets (delta_file, delta_rank)
king_moves = [
(0, 1), (0, -1), (1, 0), (-1, 0), # Orthogonal
(1, 1), (1, -1), (-1, 1), (-1, -1) # Diagonal
]
for sq in range(64):
attacks_bb = 0
# Calculate rank and file for the source square
rank = sq // 8
file = sq % 8
for df, dr in king_moves:
target_rank = rank + dr
target_file = file + df
# Check if the target square is on the board
if 0 <= target_rank <= 7 and 0 <= target_file <= 7:
# Convert target rank and file back to a square index
target_sq = target_rank * 8 + target_file
# Set the corresponding bit in the bitboard
attacks_bb |= (1 << target_sq)
all_attacks.append(attacks_bb)
return all_attacks
def print_rust_array(attacks, const_name):
"""
Prints the list of attack bitboards as a Rust array.
"""
print(f"pub const {const_name}: [u64; 64] = [")
for i, attacks_bb in enumerate(attacks):
# Format as 64-bit zero-padded binary string
raw_binary_string = f"{attacks_bb:064b}"
# Insert underscores every 8 bits for readability
chunks = [raw_binary_string[i:i+8] for i in range(0, 64, 8)]
binary_string = f"0b{'_'.join(chunks)}"
# Correctly index the string 'ABCDEFGH'
print(f" {binary_string}, // Square {i} ({'ABCDEFGH'[i%8]}{i//8 + 1})")
print("];")
if __name__ == "__main__":
attacks = generate_king_attacks()
print_rust_array(attacks, "KING_ATTACKS")