diff --git a/src/board.rs b/src/board.rs index ee96cc4..08eaf0d 100644 --- a/src/board.rs +++ b/src/board.rs @@ -146,14 +146,14 @@ impl Board { let mut chains: Vec> = Vec::with_capacity(8); - chains.extend(i_chain.map(|range| range.into_iter().map(|i| (i, j)).collect())); - - chains.extend(j_chain.map(|range| range.into_iter().map(|j| (i, j)).collect())); + chains.extend(i_chain.map(|range| range.map(|i| (i, j)).collect())); + chains.extend(j_chain.map(|range| range.map(|j| (i, j)).collect())); // handle diagonals chains.extend(diag(i, j, 0, 0, BOARD_SIZE - 1, BOARD_SIZE - 1).map(Iterator::collect)); - let mut fill: Vec<(usize, usize)> = Vec::with_capacity(chains.iter().map(Vec::len).sum()); + // Longest chain is (BOARD_SIZE - 2) as there needs to be the two pieces containing it + let mut fill: Vec<(usize, usize)> = Vec::with_capacity((BOARD_SIZE - 2) * chains.len()); for chain in chains { for (chain_length, &(new_i, new_j)) in chain.iter().enumerate() {