From a0c558032b2888f472f3b47b06e4df393d5d109d Mon Sep 17 00:00:00 2001 From: Johannes Date: Sun, 8 Dec 2024 07:50:08 +0100 Subject: [PATCH] day 8 part 1 --- src/day08.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + src/main.rs | 1 + 3 files changed, 74 insertions(+) create mode 100644 src/day08.rs diff --git a/src/day08.rs b/src/day08.rs new file mode 100644 index 0000000..4433a49 --- /dev/null +++ b/src/day08.rs @@ -0,0 +1,72 @@ +use std::{collections::HashSet, fs::read_to_string}; + +use itertools::Itertools; + +use crate::utils::grid::Grid; + +pub fn day_main() { + let input = read_to_string("input/day08.txt").unwrap(); + let input = input.trim(); + println!(" part1: {}", part1(input)); + println!(" part2: {}", part2(input)); +} + +type RiddleResult = usize; + +fn part1(input: &str) -> RiddleResult { + let grid = Grid::parse(input); + let mut antinodes = HashSet::new(); + let antennas = grid + .entries() + .filter(|(_, c)| **c != '.') + .into_group_map_by(|(_, c)| *c); + for (frequency, coords) in antennas { + for (a, _) in coords.iter() { + for (b, _) in coords.iter() { + if a == b { + continue; + } + let dx = a.0 - b.0; + let dy = a.1 - b.1; + let p = (a.0 + dx, a.1 + dy); + if grid.contains_key(p) { + antinodes.insert(p); + } + } + } + } + antinodes.len() +} + +fn part2(_input: &str) -> RiddleResult { + 0 +} + +#[cfg(test)] +mod test { + use super::{part1, part2}; + + const TEST_INPUT: &str = r"............ +........0... +.....0...... +.......0.... +....0....... +......A..... +............ +............ +........A... +.........A.. +............ +............ +"; + + #[test] + fn test1() { + assert_eq!(part1(TEST_INPUT), 14); + } + + #[test] + fn test2() { + assert_eq!(part2(TEST_INPUT), 0); + } +} diff --git a/src/lib.rs b/src/lib.rs index e34887c..9e83a3a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,4 +5,5 @@ pub mod day04; pub mod day05; pub mod day06; pub mod day07; +pub mod day08; pub mod utils; diff --git a/src/main.rs b/src/main.rs index b721434..133ef8d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,6 +12,7 @@ fn main() { (5, day05::day_main), (6, day06::day_main), (7, day07::day_main), + (8, day08::day_main), ]); let day: Option = args().nth(1).and_then(|a| a.parse().ok()); let Some(day) = day else {