From 6b89133a79e798edadca7eb59800441535e97670 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Wed, 2 Jul 2025 14:45:11 +0200 Subject: Day 15 2022 --- 2022/15/b.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 2022/15/b.rs (limited to '2022/15/b.rs') diff --git a/2022/15/b.rs b/2022/15/b.rs new file mode 100644 index 0000000..3c321e1 --- /dev/null +++ b/2022/15/b.rs @@ -0,0 +1,33 @@ +use std::cmp::max; +mod common; +use common::*; + +#[allow(non_snake_case)] +fn get_pos(sensors: &Vec, N: i64) -> Pos { + for i in 0..=N { + let mut ranges = sensors.iter() + .map(|s| s.get_range(i)) + .filter(|r| r.left <= r.right) + .collect::>(); + ranges.sort(); + let mut lastr = ranges[0].right; + for j in 1..ranges.len() { + if lastr + 1 < ranges[j].left { + return Pos { x: lastr+1, y: i }; + } + lastr = max(lastr, ranges[j].right); + } + if lastr < N { + return Pos { x: N, y: i }; + } + } + panic!("Position not found"); +} + +fn main() { + const N: i64 = 4000000; + const M: i64 = 4000000; + let sensors = read_sensors_from_stdin(); + let p = get_pos(&sensors, N); + println!("x = {}, y = {} -> {}", p.x, p.y, p.x * M + p.y); +} -- cgit v1.3