From 1686c8a28ce5ecc58c3db31d6d06400b9623095e Mon Sep 17 00:00:00 2001 From: Johannes Date: Sat, 1 Oct 2022 23:00:21 +0200 Subject: [PATCH] day19 cleanup --- src/tasks/day19.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/tasks/day19.rs b/src/tasks/day19.rs index e613acf..26d741f 100644 --- a/src/tasks/day19.rs +++ b/src/tasks/day19.rs @@ -8,10 +8,10 @@ pub fn run() { part2(&program); } -fn part1(program: &RAM, max: i128) { - let result = (0..max) +fn part1(program: &RAM, max_perimeter: i128) { + let result = (0..max_perimeter) .flat_map(|x| { - (0..max) + (0..max_perimeter) .map(|y| { read_coordinate(program, x, y) }) @@ -23,19 +23,18 @@ fn part1(program: &RAM, max: i128) { println!("Part 1: {result}"); } -const W: i128 = 100; -const MAX_PERIMETER: i128 = 1_000_000_000; +const SHIP_SIZE: i128 = 100; fn part2(program: &RAM) { let mut map: HashMap<(i128, i128), bool> = HashMap::new(); - (0..W) + (0..SHIP_SIZE) .for_each(|x| { - (0..W) + (0..SHIP_SIZE) .for_each(|y| { map.insert((x, y), read_coordinate(program, x, y)); }) }); - for perimeter in 0..=MAX_PERIMETER { + for perimeter in 0.. { extend_horizon(program, &mut map, perimeter); if let Some((x, y)) = check_all_squares_starting_at(&map, perimeter) { let result = x * 10_000 + y; @@ -59,9 +58,9 @@ fn check_all_squares_starting_at(map: &HashMap<(i128, i128), bool>, perimeter: i fn check_fits(map: &HashMap<(i128, i128), bool>, x: i128, y: i128) -> Option<(i128, i128)> { let ul = map[&(x, y)]; - let ur = map[&(x + W - 1, y)]; - let ll = map[&(x, y + W - 1)]; - let lr = map[&(x + W, y + W - 1)]; + let ur = map[&(x + SHIP_SIZE - 1, y)]; + let ll = map[&(x, y + SHIP_SIZE - 1)]; + let lr = map[&(x + SHIP_SIZE, y + SHIP_SIZE - 1)]; if ul && ur && ll && lr { return Some((x, y)); } @@ -69,8 +68,8 @@ fn check_fits(map: &HashMap<(i128, i128), bool>, x: i128, y: i128) -> Option<(i1 } fn extend_horizon(program: &RAM, map: &mut HashMap<(i128, i128), bool>, starts: i128) { - (0..=W + starts).for_each(|i| { - let j = W + starts; + (0..=SHIP_SIZE + starts).for_each(|i| { + let j = SHIP_SIZE + starts; map.insert((j, i), read_coordinate(program, j, i)); map.insert((i, j), read_coordinate(program, i, j)); });