count
}
- let start = (1, 1);
- let count_outside = travel(start, &mut seen, map_extended, &frontier_coord);
+ // on cherche une case à l'intérieur
+ // on sait que les lignes intermédiaires ne contiennent que de '|' et de ' '
+ // on parcourt les lignes intermédiaires et on s'arrête dès qu'on trouve
+ // la frontière et une limite '|'
+ let mut start = (1, 1);
+ for r in (1..map_extended.len()).step_by(2) {
+ let mut is_inside = false;
+ for c in (0..map_extended[0].len()).step_by(2) {
+ if map_extended[r][c] == '|' && is_frontier(&frontier_coord, (r, c)) {
+ is_inside = !is_inside;
+ start = (r, c + 1);
+ break;
+ }
+ }
+ if start != (1, 1) {
+ break;
+ }
+ }
+ let count_inside = travel(start, &mut seen, map_extended, &frontier_coord);
// penser à retirer 2 lignes et 2 colonnes (les bordures en plus)
let total: u32 = (puzzle.map[0].len() - 2) as u32 * (puzzle.map.len() - 2) as u32;
- let res = total - puzzle_frontier_length - count_outside;
+ let res = count_inside;
Ok(res)
}