logic fixes and nits

This commit is contained in:
2025-02-11 23:53:17 -05:00
parent ca423942c8
commit 7992aca803
3 changed files with 46 additions and 55 deletions

View File

@@ -4,7 +4,7 @@ use crate::{
};
use arrayvec::ArrayVec;
use lazy_static::lazy_static;
use std::{cmp::Ordering, fmt};
use std::{cmp::Ordering, fmt, mem::MaybeUninit};
pub const BOARD_SIZE: usize = 8;
@@ -19,50 +19,43 @@ type ChainCollection = ArrayVec<Chain, 8>;
/// with each coordinate
type PosMap<T> = ArrayVec<ArrayVec<T, BOARD_SIZE>, BOARD_SIZE>;
fn gen_adj_lookup() -> PosMap<ChainCollection> {
(0..BOARD_SIZE)
.map(|i| {
(0..BOARD_SIZE)
.map(|j| {
let (i_chain, j_chain) = (
split_from(0..=BOARD_SIZE - 1, i),
split_from(0..=BOARD_SIZE - 1, j),
);
let mut chains: ChainCollection = ArrayVec::new_const();
chains.extend(
i_chain
.clone()
.map(|range| range.map(move |i| (i, j)))
.map(Iterator::collect),
);
chains.extend(
j_chain
.clone()
.map(|range| range.map(move |j| (i, j)))
.map(Iterator::collect),
);
// handle diagonals
chains.extend(diag_raw(i_chain, j_chain).map(Iterator::collect));
chains
})
.collect()
})
.collect()
}
lazy_static! {
/// Precompute all possible chains for each position on the board
pub static ref ADJ_LOOKUP: PosMap<ChainCollection> = {
let mut output = ArrayVec::new();
// populate arrayvec as we index it [i][j]
for _ in 0..BOARD_SIZE {
let mut a = ArrayVec::new();
// [j]
for _ in 0..BOARD_SIZE {
a.push(ArrayVec::new());
}
output.push(a);
}
for (i, j) in Board::all_positions() {
let (i_chain, j_chain) = (
split_from(0..=BOARD_SIZE - 1, i),
split_from(0..=BOARD_SIZE - 1, j),
);
let mut chains: ChainCollection = ArrayVec::new_const();
chains.extend(
i_chain
.clone()
.map(|range| range.map(move |i| (i, j)))
.map(Iterator::collect),
);
chains.extend(
j_chain
.clone()
.map(|range| range.map(move |j| (i, j)))
.map(Iterator::collect),
);
// handle diagonals
chains.extend(diag_raw(i_chain, j_chain).map(Iterator::collect));
output[i][j] = chains;
}
output
};
pub static ref ADJ_LOOKUP: PosMap<ChainCollection> = gen_adj_lookup();
}
#[derive(Copy, Clone, PartialEq, Eq)]