2025: day07
This commit is contained in:
parent
47dfb876eb
commit
b91aad3b14
6 changed files with 369 additions and 0 deletions
|
|
@ -6,6 +6,7 @@ use aoc2025::day03;
|
||||||
use aoc2025::day04;
|
use aoc2025::day04;
|
||||||
use aoc2025::day05;
|
use aoc2025::day05;
|
||||||
use aoc2025::day06;
|
use aoc2025::day06;
|
||||||
|
use aoc2025::day07;
|
||||||
|
|
||||||
fn aoc2025_all(c: &mut Criterion) {
|
fn aoc2025_all(c: &mut Criterion) {
|
||||||
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
c.bench_function("day01", |b| b.iter(|| day01::run().unwrap()));
|
||||||
|
|
@ -14,6 +15,7 @@ fn aoc2025_all(c: &mut Criterion) {
|
||||||
c.bench_function("day04", |b| b.iter(|| day04::run().unwrap()));
|
c.bench_function("day04", |b| b.iter(|| day04::run().unwrap()));
|
||||||
c.bench_function("day05", |b| b.iter(|| day05::run().unwrap()));
|
c.bench_function("day05", |b| b.iter(|| day05::run().unwrap()));
|
||||||
c.bench_function("day06", |b| b.iter(|| day06::run().unwrap()));
|
c.bench_function("day06", |b| b.iter(|| day06::run().unwrap()));
|
||||||
|
c.bench_function("day07", |b| b.iter(|| day07::run().unwrap()));
|
||||||
}
|
}
|
||||||
|
|
||||||
criterion_group! {
|
criterion_group! {
|
||||||
|
|
|
||||||
142
aoc2025/input/day07.txt
Normal file
142
aoc2025/input/day07.txt
Normal file
|
|
@ -0,0 +1,142 @@
|
||||||
|
......................................................................S......................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................................................................^......................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................................................................^.^.....................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................................................................^...^....................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................................................................^.^.^.^...................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................................................................^.^.....^..................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................................................................^.^.^.^...^.................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................................................................^.^.^...^...^................................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............................................................^.^.^.^...^.^.^...............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............................................................^.^.^...^.^.^.^.^..............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............................................................^.^.^...^...^...^.^.............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
............................................................^...^.^.^.^.^.^.....^............................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........................................................^.......^...^.^.^...^.^...........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........................................................^.^.^.^.......^.^.^.^.^.^..........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........................................................^.^.^.^.^.^.........^.^.^.^.........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
........................................................^.^.^.^.^...^.^.^.^.^.^.^.^.^........................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......................................................^.^.^.....^...^.....^.........^.......................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................................................^.^.^.^.^...^...^.^...^.^.^...^.^......................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................................................^...^.^.^.^.^.^...^...^...^.^.^.^.^.....................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................................................^.^...^.^...^.^.^.^.^.^.....^.^.^.^.^....................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................................................^.^...^.^...^...^.^.....^.....^...^.^.^...................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................................................^.^.....^...^.^...^.^.^.^.^.^.^.^.^...^.^..................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................................................^...^.^...^...^.^.....^.....^.........^.^.^.................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................................................^.^.^...^.^.^.^.^.......^...^.^.^.^.^.^...^.^................................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............................................^.........^.^.^.^.........^...^.^.^...^...^.^.^...............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............................................^...^.^.^.^...^.^.^.^...^.^.^...^.....^.....^.^.^..............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............................................^.....^.^.......^.^...^.^.^.^.......^.^.^.^...^...^.............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
............................................^...^...^.^.^.^.^...^.^.^.^...........^.^...^...^.^.^............................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........................................^.^.^.^...^...^...^.^.^.....^.^.^.^.....^...^.^.^.^.^.^...........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........................................^...^...^.^.^.....^.^...^.^.^.^.^.^.......^.^.^...^.^...^..........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........................................^...^.^...^.^.....^.^.^.^.^.^.^.^...^.^.^.^.^.^.^...^.....^.........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
........................................^.^...^.^.^.^.^.^.^.^.......^...^.^.^.^.......^.^.^.^.^...^.^........................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......................................^.^...^.^.^.^.^.^.^.^.^.^...^.^.....^...^...^...^.^.^.^.^.^...^.......................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................................^.^.^...^.^.^.^.^.^...........^.^.^.^.^.^...^.^.....^.^.^.^.^.^.^......................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................................^.^.^.......^.^.^.......^...^.....^.^.^...^.^.^...^.^.^...^.^.^...^.....................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................................^.^...^.^.....^.^.^...^.^.^.^.^.....^.......^.^.^...^...........^.^.^....................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................................^.^.^...^.^.^.^...^...^.......^.^.^.^.^...^.^.^.^.^.^.^...^.^.....^...^...................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................................^.^.....^.........^...^.^.^.^.......^.^.^...^.....^.........^.^.........^..................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................................^.^.^.^.^.^.^.^.^...^.^...^.^.......^.^.^...^.......^.^.....^...^.^.^.....^.................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................................^.^...^...^.^.^.^...^.^.......^.^.^.^.^.^.^.^...^.^.^.....^.^.....^...^.....^................................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............................^...^.^.^.^...^.^.^.^.^...^.^...^.^.^.....^.^.^.^.^.^.^...^.......^.^.^...^.^.^...............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............................^...^.^...^.^.^.^.^.^.^.^.......^.^.^.^.^.^...^.........^.^.....^.^.^.^...^.^...^..............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............................^...^.^.^...^.^...^.^.^...^.^...^...^.^.^.^.......^.^...^.^...^...^.^.^...^.^.^.^.^.............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
............................^.........^...........^.........^.^.^...^.^.^.^.......^...^.^.^...^.^...^.^.^.^...^.^............................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........................^.....^.^.^.^.^...^...^.^.....^.^.^...^...^.^.^.^.^...^.^...^...^.^.^.^.^...^.^.^...^.^...........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........................^.^.^.^.^...^.....^.^.....^.^.^.^.^.^.^.^...^.^.^.^.^.^.^...^.^.^.......^.......^.^.^.^.^..........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........................^.^.^.....^.^.^.^.^.^.....^...^.^.^.^.......^.^.^.^.^.^.^.^.^...^.^...^.^.^...^.^...^.^.^.^.........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
........................^.^.^.....^.^.^...^.^.^.^.^.^...^.....^.....^.....^.^.^...^...^.^.....^...^.^.^.^.^.^.^...^.^........................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......................^.^.......^.^...^.^.^.^.^...^...^.^.^.......^.^.......^...^.....^.^...^.^.^...^.^...^.^.^.^.^.^.......................
|
||||||
|
.............................................................................................................................................
|
||||||
|
......................^...^.^.^.^.^...^.^.^.....^.^...^.^...^.....^.^.^.^.^.^.^.^.......^.^.....^...^.^.^.^.^.^.^.....^......................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....................^...^.....^.^.^.^.......^.^.^.......^...........^...^.^...^.^.^.^...^.^...^.^...^.^.^.^.^...^...^.^.....................
|
||||||
|
.............................................................................................................................................
|
||||||
|
....................^.^.^...^.^.....^...^...^.^.^.^.^.^.^.^.^.^.^.^...^.^...^.^.^.^.^...^.^.^...^.^...^.^.....^...^.^.^.^....................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...................^.....^...^.^.^.^...^.......^.^...^.^.^.^...^.^...^.^.^...^.^.^...^.^.^...^.....^.^.^.^.^.^.^.^.^.^.^.^...................
|
||||||
|
.............................................................................................................................................
|
||||||
|
..................^.^.^.^.^...^.^.^.^...^.^.^.^.^...^.^.^.^...^...^...^.^.......^.^.^.^.....^.^...^.^.^...^...^.^.....^.^.^..................
|
||||||
|
.............................................................................................................................................
|
||||||
|
.................^.^.^.^.^...^.^.......^.^.^...^.^...^...^...^.^.^.^...^.^...^.^.^.^.^.^.^...^.^.^.^.^.^...^...^.^...^...^.^.................
|
||||||
|
.............................................................................................................................................
|
||||||
|
................^.^...^...........^.^.^.......^.^...^.^.^.......^...^.^.^...^...^.^...^...^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^................
|
||||||
|
.............................................................................................................................................
|
||||||
|
...............^.^.....^.^...^.^...^...^.^.^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^...^.........^.^.^.^.^.^...............
|
||||||
|
.............................................................................................................................................
|
||||||
|
..............^...^...^.^.^.^.^.^...^.^.^...^.^.....^.^.^.......^...^.^...^.^.^...^...^.^.^.^.^...^.^...^.^...........^.....^.^..............
|
||||||
|
.............................................................................................................................................
|
||||||
|
.............^.......^...^...^.^...^.^.^.....^.......^.^.^...^.^.^.^.^.^.^.^.......^...^.^.^.^.^.^.^.....^.^.......^.....^.^.^.^.............
|
||||||
|
.............................................................................................................................................
|
||||||
|
............^...^.^.^.^.^.....^.^.^.^.^.^.^.^.^.^.^...^.^.^.^...^.^...^.^.....^.^...^.......^...^...........^.^.^...^.^...^.^.^.^............
|
||||||
|
.............................................................................................................................................
|
||||||
|
...........^.....^.^.^...^.^.^.^.^.....^...^...^...^.^.^.......^.....^.^.^.^.....^.^.^.^.^.^.^.^...^.^.^.^.^.^.^...^.^...^.^...^.^...........
|
||||||
|
.............................................................................................................................................
|
||||||
|
..........^.^.^.^.^.^.^...^...^...^.....^.^.........^...^.^.....^...^...^.^.....^.^.^.^.^...^.^.^...^.^.^...^.....^.....^.^...^.^.^..........
|
||||||
|
.............................................................................................................................................
|
||||||
|
.........^.^...^.^...^...^.....^...^.^.........^...^.^.^.....^.^...........^.^...^.^.^...^.^.......^.^.^.^.^...^.^.^.^...^.^.^.....^.........
|
||||||
|
.............................................................................................................................................
|
||||||
|
........^.^.^.^.^...^...^.....^...^.^.^.^.........^...^.^.^.....^...^.^...^.^.^.....^.^.^.^.^.....^...^.^...^.^.^.^...^.^...^.^.^.^.^........
|
||||||
|
.............................................................................................................................................
|
||||||
|
.......^...^.^.^...^.......^.....^.^...^.^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^...^.^.^.^.^.^...^.^.^.^.^.....^.^.^.......
|
||||||
|
.............................................................................................................................................
|
||||||
|
......^...^.^.^...^...^.^...^.^.....^.^.....^.^.^.^...^.^...^...^.....^.^...^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...^.....^......
|
||||||
|
.............................................................................................................................................
|
||||||
|
.....^.....^...^.^.^...^...^.^.^.^.^...^.^.^.^.^...^.^...^.^.^.....^...^.^.^.^.....^...^.........^.....^.^...^.^.^.....^.^.^.^.^.^.....^.....
|
||||||
|
.............................................................................................................................................
|
||||||
|
....^.....^.^.^.......^.^.....^.^.^.^.....^.^.^.^...^.^.^.^.^.^.....^.^...^...^.^.^.^.^.^.........^.^.^.^.^...^.^.^...^.^.^...^.^...^.^.^....
|
||||||
|
.............................................................................................................................................
|
||||||
|
...^.........^.^.^...^...^.^.^.^.....^.^...^.^.....^.^.^...^.^.^.....^.^.^...^.^.^.^.^.^.^.^.....^.^.^.^...^.....^.^.^.^.^...^.......^.^.^...
|
||||||
|
.............................................................................................................................................
|
||||||
|
..^.^...^.^...^.^.^.^.....^.^.....^...^.^.....^.^.^.^.^...^.....^.^.^...^.^.........^.^.^.........^.........^.^.^.^.^.^...^.^.^.^.^.^...^.^..
|
||||||
|
.............................................................................................................................................
|
||||||
|
.^.....^...^.^.^...^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...^.^...^.^.^.^.^...^.^.....^.^...^.^.^.^.^...^...^...^...^.^.^...^.........^.^.^.^.
|
||||||
|
.............................................................................................................................................
|
||||||
16
aoc2025/input/day07_provided.txt
Normal file
16
aoc2025/input/day07_provided.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
.......S.......
|
||||||
|
...............
|
||||||
|
.......^.......
|
||||||
|
...............
|
||||||
|
......^.^......
|
||||||
|
...............
|
||||||
|
.....^.^.^.....
|
||||||
|
...............
|
||||||
|
....^.^...^....
|
||||||
|
...............
|
||||||
|
...^.^...^.^...
|
||||||
|
...............
|
||||||
|
..^...^.....^..
|
||||||
|
...............
|
||||||
|
.^.^.^.^.^...^.
|
||||||
|
...............
|
||||||
206
aoc2025/src/day07.rs
Normal file
206
aoc2025/src/day07.rs
Normal file
|
|
@ -0,0 +1,206 @@
|
||||||
|
use anyhow::{Result, anyhow, bail};
|
||||||
|
use std::{
|
||||||
|
collections::{HashMap, hash_map::Entry},
|
||||||
|
fmt::Write,
|
||||||
|
str::FromStr,
|
||||||
|
};
|
||||||
|
|
||||||
|
const INPUT: &str = include_str!("../input/day07.txt");
|
||||||
|
|
||||||
|
pub fn run() -> Result<String> {
|
||||||
|
let mut res = String::with_capacity(128);
|
||||||
|
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||||
|
writeln!(res, "part 2: {}", part2(INPUT)?)?;
|
||||||
|
Ok(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
enum DiagramCell {
|
||||||
|
Source,
|
||||||
|
EmptySpace,
|
||||||
|
Splitter,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for DiagramCell {
|
||||||
|
type Err = anyhow::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self> {
|
||||||
|
match s {
|
||||||
|
"S" => Ok(DiagramCell::Source),
|
||||||
|
"." => Ok(DiagramCell::EmptySpace),
|
||||||
|
"^" => Ok(DiagramCell::Splitter),
|
||||||
|
_ => Err(anyhow!(
|
||||||
|
"cannot parse unexpected string `{}' as DiagramCell",
|
||||||
|
s
|
||||||
|
)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
struct ManifoldDiagram {
|
||||||
|
grid: Vec<Vec<DiagramCell>>,
|
||||||
|
source_coords: (usize, usize),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromStr for ManifoldDiagram {
|
||||||
|
type Err = anyhow::Error;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self> {
|
||||||
|
let mut grid = Vec::new();
|
||||||
|
let mut source_coords = None;
|
||||||
|
for (line_idx, line) in s.lines().enumerate() {
|
||||||
|
let mut grid_line = Vec::new();
|
||||||
|
for cell_idx in 0..line.len() {
|
||||||
|
let cell = line[cell_idx..=cell_idx].parse()?;
|
||||||
|
if let DiagramCell::Source = cell {
|
||||||
|
match source_coords {
|
||||||
|
None => source_coords = Some((cell_idx, line_idx)),
|
||||||
|
Some(_) => bail!("found two different sources in diagram"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
grid_line.push(cell);
|
||||||
|
}
|
||||||
|
grid.push(grid_line);
|
||||||
|
}
|
||||||
|
|
||||||
|
source_coords
|
||||||
|
.ok_or(anyhow!("couldn't find source in diagram"))
|
||||||
|
.map(|source_coords| Self {
|
||||||
|
grid,
|
||||||
|
source_coords,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ManifoldDiagram {
|
||||||
|
fn count_ray_splits(&self) -> usize {
|
||||||
|
let mut ray_sources = vec![self.source_coords];
|
||||||
|
// TODO: we use a HashMap<(usize, usize), ()> because a HashSet doesn't have `entry` methods in stable:
|
||||||
|
// https://github.com/rust-lang/rust/issues/60896
|
||||||
|
let mut used_splitters = HashMap::new();
|
||||||
|
|
||||||
|
let mut count = 0;
|
||||||
|
while let Some(ray_source) = ray_sources.pop() {
|
||||||
|
let (x, mut y) = ray_source;
|
||||||
|
y += 1;
|
||||||
|
while y < self.grid.len()
|
||||||
|
&& let DiagramCell::EmptySpace = self.grid[y][x]
|
||||||
|
{
|
||||||
|
y += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if y == self.grid.len() {
|
||||||
|
// We've reached the end of the diagram, we can stop computing this ray
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// otherwise, we've hit a splitter (unless there are multiple sources, which shouldn't happen)
|
||||||
|
if let DiagramCell::Splitter = self.grid[y][x] {
|
||||||
|
// make sure we don't exit the grid when splitting, shouldn't happen
|
||||||
|
assert!(x > 0 && x < (self.grid[0].len() - 1));
|
||||||
|
|
||||||
|
if let Entry::Vacant(e) = used_splitters.entry((x, y)) {
|
||||||
|
e.insert(());
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ray_sources.push((x - 1, y));
|
||||||
|
ray_sources.push((x + 1, y));
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
count
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is an iterative implementation of the obvious recursive algorithm for Part 2. It's
|
||||||
|
// probably unnecessarily complex written this way, it ended up that way because I reused the
|
||||||
|
// Part 1 code and felt it was faster to adapt it rather than rewrite the recursive version :)
|
||||||
|
fn count_timelines(&self) -> usize {
|
||||||
|
let mut ray_sources = vec![self.source_coords];
|
||||||
|
let mut timelines_from: HashMap<(usize, usize), usize> = HashMap::new();
|
||||||
|
|
||||||
|
while let Some(ray_source) = ray_sources.pop() {
|
||||||
|
let (x, mut y) = ray_source;
|
||||||
|
y += 1;
|
||||||
|
while y < self.grid.len()
|
||||||
|
&& let DiagramCell::EmptySpace = self.grid[y][x]
|
||||||
|
{
|
||||||
|
y += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if y == self.grid.len() {
|
||||||
|
// We've reached the end of the diagram, this ray is a single timeline
|
||||||
|
timelines_from.insert(ray_source, 1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, we've hit a splitter (unless there are multiple sources, which shouldn't happen)
|
||||||
|
if let DiagramCell::Splitter = self.grid[y][x] {
|
||||||
|
// Make sure we don't exit the grid when splitting, shouldn't happen
|
||||||
|
assert!(x > 0 && x < (self.grid[0].len() - 1));
|
||||||
|
let (ray_left, ray_right) = ((x - 1, y), (x + 1, y));
|
||||||
|
|
||||||
|
let left = timelines_from.get(&ray_left);
|
||||||
|
let right = timelines_from.get(&ray_right);
|
||||||
|
match (left, right) {
|
||||||
|
(Some(res_left), Some(res_right)) => {
|
||||||
|
timelines_from.insert(ray_source, res_left + res_right);
|
||||||
|
}
|
||||||
|
(None, Some(_)) => {
|
||||||
|
ray_sources.push(ray_source);
|
||||||
|
ray_sources.push(ray_left);
|
||||||
|
}
|
||||||
|
(Some(_), None) => {
|
||||||
|
ray_sources.push(ray_source);
|
||||||
|
ray_sources.push(ray_right);
|
||||||
|
}
|
||||||
|
(None, None) => {
|
||||||
|
ray_sources.push(ray_source);
|
||||||
|
ray_sources.push(ray_left);
|
||||||
|
ray_sources.push(ray_right);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*timelines_from.get(&self.source_coords).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(input: &str) -> Result<usize> {
|
||||||
|
let diagram = input.parse::<ManifoldDiagram>()?;
|
||||||
|
Ok(diagram.count_ray_splits())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(input: &str) -> Result<usize> {
|
||||||
|
let diagram = input.parse::<ManifoldDiagram>()?;
|
||||||
|
Ok(diagram.count_timelines())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
const PROVIDED: &str = include_str!("../input/day07_provided.txt");
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_provided() {
|
||||||
|
assert_eq!(part1(PROVIDED).unwrap(), 21);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_real() {
|
||||||
|
assert_eq!(part1(INPUT).unwrap(), 1537);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2_provided() {
|
||||||
|
assert_eq!(part2(PROVIDED).unwrap(), 40);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2_real() {
|
||||||
|
assert_eq!(part2(INPUT).unwrap(), 18818811755665);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,3 +4,4 @@ pub mod day03;
|
||||||
pub mod day04;
|
pub mod day04;
|
||||||
pub mod day05;
|
pub mod day05;
|
||||||
pub mod day06;
|
pub mod day06;
|
||||||
|
pub mod day07;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ use aoc2025::day03;
|
||||||
use aoc2025::day04;
|
use aoc2025::day04;
|
||||||
use aoc2025::day05;
|
use aoc2025::day05;
|
||||||
use aoc2025::day06;
|
use aoc2025::day06;
|
||||||
|
use aoc2025::day07;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let days: &[DayFunc] = &[
|
let days: &[DayFunc] = &[
|
||||||
|
|
@ -17,6 +18,7 @@ fn main() -> Result<()> {
|
||||||
day04::run,
|
day04::run,
|
||||||
day05::run,
|
day05::run,
|
||||||
day06::run,
|
day06::run,
|
||||||
|
day07::run,
|
||||||
];
|
];
|
||||||
|
|
||||||
aoc::run(days)
|
aoc::run(days)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue