From ef4de807d4a143f8a9d15afd0d59904d8d0ced2f Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Wed, 10 Dec 2025 21:26:21 -0800 Subject: [PATCH] day11: part1 --- .aoc_tiles/tiles/2025/11.png | Bin 0 -> 4874 bytes README.md | 5 +- src/day11.rs | 88 +++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2025/11.png create mode 100644 src/day11.rs diff --git a/.aoc_tiles/tiles/2025/11.png b/.aoc_tiles/tiles/2025/11.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9c6376d7212ae9e51b552e31daeebcfebcaef GIT binary patch literal 4874 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 8897295..3d75012 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- 2025 - 18 ⭐ - Rust + 2025 - 19 ⭐ - Rust

@@ -32,4 +32,7 @@ + + + diff --git a/src/day11.rs b/src/day11.rs new file mode 100644 index 0000000..308ea7a --- /dev/null +++ b/src/day11.rs @@ -0,0 +1,88 @@ +use aoc_runner_derive::{aoc, aoc_generator}; +use cached::proc_macro::cached; +use indicatif::{ProgressBar, ProgressFinish, ProgressStyle}; +use itertools::Itertools; +use std::collections::HashMap; + +type Edges = HashMap>; + +#[aoc_generator(day11)] +fn parse(input: &str) -> (Edges, Edges) { + let mut edges: Edges = HashMap::new(); + let mut rev_edges: Edges = HashMap::new(); + for l in input.lines() { + let (k, rest) = l.split_once(": ").unwrap(); + for v in rest.split_ascii_whitespace() { + edges.entry(k.to_string()).or_default().push(v.to_string()); + rev_edges + .entry(v.to_string()) + .or_default() + .push(k.to_string()); + } + } + + (edges, rev_edges) +} + +fn find_path(cur: &str, goal: &str, edges: &Edges) -> u64 { + if cur == goal { + return 1; + } + if let Some(nexts) = edges.get(cur) { + nexts.iter().map(|n| find_path(n, goal, edges)).sum() + } else { + 0 + } +} + +#[aoc(day11, part1)] +fn part1((fwd, rev): &(Edges, Edges)) -> u64 { + let mut count = 0u64; + let mut to_check = Vec::from_iter(rev["out"].iter()); + + let mut pb = ProgressBar::no_length() + .with_style( + ProgressStyle::with_template( + "[{elapsed_precise}/{eta_precise}] {bar:40.cyan/blue} {pos:>7}/{len:7} {per_sec}", + ) + .unwrap(), + ) + .with_finish(indicatif::ProgressFinish::AndLeave); + + find_path("you", "out", fwd) +} + +#[aoc(day11, part2)] +fn part2(input: &(Edges, Edges)) -> u64 { + 0 +} + +#[cfg(test)] +mod tests { + use rstest::rstest; + + use super::*; + + const EXAMPLE: &str = "aaa: you hhh +you: bbb ccc +bbb: ddd eee +ccc: ddd eee fff +ddd: ggg +eee: out +fff: out +ggg: out +hhh: ccc fff iii +iii: out"; + + #[rstest] + #[case(EXAMPLE, 5)] + fn part1_example(#[case] input: &str, #[case] expected: u64) { + assert_eq!(part1(&parse(input)), expected); + } + + #[rstest] + #[case(EXAMPLE, 0)] + fn part2_example(#[case] input: &str, #[case] expected: u64) { + assert_eq!(part2(&parse(input)), expected); + } +} diff --git a/src/lib.rs b/src/lib.rs index 4831a4d..8afe3bf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,6 @@ mod day1; mod day10; +mod day11; mod day2; mod day3; mod day4;