1
0

day 8 part 1

This commit is contained in:
2024-12-08 07:50:08 +01:00
parent 19c60b98db
commit a0c558032b
3 changed files with 74 additions and 0 deletions

72
src/day08.rs Normal file
View File

@@ -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);
}
}

View File

@@ -5,4 +5,5 @@ pub mod day04;
pub mod day05;
pub mod day06;
pub mod day07;
pub mod day08;
pub mod utils;

View File

@@ -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<u8> = args().nth(1).and_then(|a| a.parse().ok());
let Some(day) = day else {