use aoc22::{day15, util}; use itertools::Itertools; const ROW: isize = 2000000; pub fn main() { let sensors = day15::parse_sensors(&util::parse_input()); let covered = sensors .iter() .map(|s| s.covered(ROW)) .filter(|r| !r.is_empty()) .sorted_by_key(|r| *r.start()); let mut max_x = isize::MIN; let mut total_covered = 0; for range in covered { let (min, max) = range.into_inner(); if min > max_x { total_covered += max - min + 1; } else if max > max_x { total_covered += max - max_x; } max_x = max_x.max(max); } let n_beacons = sensors .iter() .map(|s| s.loc_b) .filter(|b| b.0 == ROW) .unique() .count() as isize; println!( "Impossible positions in row {}: {}", ROW, total_covered - n_beacons ); }