day 8 part 1
This commit is contained in:
72
src/day08.rs
Normal file
72
src/day08.rs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,4 +5,5 @@ pub mod day04;
|
|||||||
pub mod day05;
|
pub mod day05;
|
||||||
pub mod day06;
|
pub mod day06;
|
||||||
pub mod day07;
|
pub mod day07;
|
||||||
|
pub mod day08;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ fn main() {
|
|||||||
(5, day05::day_main),
|
(5, day05::day_main),
|
||||||
(6, day06::day_main),
|
(6, day06::day_main),
|
||||||
(7, day07::day_main),
|
(7, day07::day_main),
|
||||||
|
(8, day08::day_main),
|
||||||
]);
|
]);
|
||||||
let day: Option<u8> = args().nth(1).and_then(|a| a.parse().ok());
|
let day: Option<u8> = args().nth(1).and_then(|a| a.parse().ok());
|
||||||
let Some(day) = day else {
|
let Some(day) = day else {
|
||||||
|
|||||||
Reference in New Issue
Block a user