day11: part1
This commit is contained in:
BIN
.aoc_tiles/tiles/2025/11.png
Normal file
BIN
.aoc_tiles/tiles/2025/11.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
@@ -1,6 +1,6 @@
|
|||||||
<!-- AOC TILES BEGIN -->
|
<!-- AOC TILES BEGIN -->
|
||||||
<h1 align="center">
|
<h1 align="center">
|
||||||
2025 - 18 ⭐ - Rust
|
2025 - 19 ⭐ - Rust
|
||||||
</h1>
|
</h1>
|
||||||
<a href="src/day1.rs">
|
<a href="src/day1.rs">
|
||||||
<img src=".aoc_tiles/tiles/2025/01.png" width="161px">
|
<img src=".aoc_tiles/tiles/2025/01.png" width="161px">
|
||||||
@@ -32,4 +32,7 @@
|
|||||||
<a href="src/day10.rs">
|
<a href="src/day10.rs">
|
||||||
<img src=".aoc_tiles/tiles/2025/10.png" width="161px">
|
<img src=".aoc_tiles/tiles/2025/10.png" width="161px">
|
||||||
</a>
|
</a>
|
||||||
|
<a href="src/day11.rs">
|
||||||
|
<img src=".aoc_tiles/tiles/2025/11.png" width="161px">
|
||||||
|
</a>
|
||||||
<!-- AOC TILES END -->
|
<!-- AOC TILES END -->
|
||||||
|
|||||||
88
src/day11.rs
Normal file
88
src/day11.rs
Normal file
@@ -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<String, Vec<String>>;
|
||||||
|
|
||||||
|
#[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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
mod day1;
|
mod day1;
|
||||||
mod day10;
|
mod day10;
|
||||||
|
mod day11;
|
||||||
mod day2;
|
mod day2;
|
||||||
mod day3;
|
mod day3;
|
||||||
mod day4;
|
mod day4;
|
||||||
|
|||||||
Reference in New Issue
Block a user