diff --git a/src/board.rs b/src/board.rs index 08eaf0d..54727ae 100644 --- a/src/board.rs +++ b/src/board.rs @@ -146,8 +146,16 @@ impl Board { let mut chains: Vec> = Vec::with_capacity(8); - chains.extend(i_chain.map(|range| range.map(|i| (i, j)).collect())); - chains.extend(j_chain.map(|range| range.map(|j| (i, j)).collect())); + chains.extend( + i_chain + .map(|range| range.map(move |i| (i, j))) + .map(Iterator::collect), + ); + chains.extend( + j_chain + .map(|range| range.map(move |j| (i, j))) + .map(Iterator::collect), + ); // handle diagonals chains.extend(diag(i, j, 0, 0, BOARD_SIZE - 1, BOARD_SIZE - 1).map(Iterator::collect)); diff --git a/src/misc.rs b/src/misc.rs index 147efff..a379381 100644 --- a/src/misc.rs +++ b/src/misc.rs @@ -32,7 +32,7 @@ pub fn diag( min_j: T, max_i: T, max_j: T, -) -> [impl Iterator; 4] +) -> [impl Iterator + Clone; 4] where T: num::Integer + Copy, RangeInclusive: Iterator + DoubleEndedIterator, @@ -41,7 +41,7 @@ where let i_chains = split_from(min_i, max_i, i); let j_chains = split_from(min_j, max_j, j); - [(0, 0), (1, 1), (1, 0), (0, 1)].map(|(a, b)| i_chains[a].clone().zip(j_chains[b].clone())) + [(0, 0), (1, 1), (1, 0), (0, 1)].map(move |(a, b)| i_chains[a].clone().zip(j_chains[b].clone())) } #[cfg(test)]