1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | module Fork extend self def lsb(num : UInt64) num.trailing_zeros_count end def print_bitboard(board : UInt64) str = "" 7.downto(0) do |row| 0.upto(7) do |col| bit = 1_u64 << ((row * 8) + col) str += bit & board == 0 ? '.' : "x" end str += "\n" end puts str end def iterate_bitboard(bitboard : UInt64, &) while bitboard != 0 position = lsb(bitboard) bit = (1u64 << position) yield position, bit bitboard ^= bit end end def pop_bit(bitboard : UInt64, index) bitboard & (~(1u64 << index)) end def set_bit(bitboard : UInt64, index) bitboard | (1u64 << index) end end |