diff --git a/README.md b/README.md index cdafd9b..c622d5c 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,27 @@ # Advent of Code 2025 ```bash -day01:A => 1150 ( 98us) -day01:B => 1150 ( 100us) -day02:A => 31839939622 ( 13822us) -day02:B => 41662374059 (128425us) -day03:A => 16812 ( 119us) -day03:B => 166345822896410 ( 357us) -day04:A => 1518 ( 321us) -day04:B => 8665 ( 5870us) -day05:A => 701 ( 310us) -day05:B => 352340558684863 ( 36us) -day06:A => 6503327062445 ( 266us) -day06:B => 9640641878593 ( 145us) -day07:A => 1678 ( 57us) -day07:B => 357525737893560 ( 70us) +day01:A => 1150 ( 35us) +day01:B => 1150 ( 34us) +day02:A => 31839939622 ( 5852us) +day02:B => 41662374059 ( 49642us) +day03:A => 16812 ( 45us) +day03:B => 166345822896410 ( 136us) +day04:A => 1518 ( 133us) +day04:B => 8665 ( 2174us) +day05:A => 701 ( 111us) +day05:B => 352340558684863 ( 13us) +day06:A => 6503327062445 ( 113us) +day06:B => 9640641878593 ( 53us) +day07:A => 1678 ( 22us) +day07:B => 357525737893560 ( 28us) day08:A => 0 ( 0us) day08:B => 0 ( 0us) -day09:A => 4725826296 ( 236us) +day09:A => 4725826296 ( 105us) day09:B => 0 ( 0us) -day10:A => 452 ( 667us) +day10:A => 452 ( 271us) day10:B => 0 ( 0us) -day11:A => 636 ( 491us) -day11:B => 636 ( 421us) +day11:A => 636 ( 192us) +day11:B => 636 ( 162us) ---------- - 152155us + 59331us ``` \ No newline at end of file diff --git a/src/day01/mod.rs b/src/day01/mod.rs index 8df9c19..829ddcc 100644 --- a/src/day01/mod.rs +++ b/src/day01/mod.rs @@ -18,11 +18,11 @@ L82"; #[test] fn part01a() { - assert_eq!(part01a::solve(PUZZLE.to_string()), 3); + assert_eq!(part01a::solve(PUZZLE), 3); } #[test] fn part01b() { - assert_eq!(part01b::solve(PUZZLE.to_string()), 6); + assert_eq!(part01b::solve(PUZZLE), 6); } } \ No newline at end of file diff --git a/src/day01/part01a.rs b/src/day01/part01a.rs index 11801ff..d8c4516 100644 --- a/src/day01/part01a.rs +++ b/src/day01/part01a.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; let mut dial: i32 = 50; diff --git a/src/day01/part01b.rs b/src/day01/part01b.rs index c82fa72..23cc078 100644 --- a/src/day01/part01b.rs +++ b/src/day01/part01b.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; let mut dial: i32 = 50; diff --git a/src/day02/mod.rs b/src/day02/mod.rs index d8aa66c..9fdf825 100644 --- a/src/day02/mod.rs +++ b/src/day02/mod.rs @@ -9,11 +9,11 @@ mod tests { #[test] fn part02a() { - assert_eq!(part02a::solve(PUZZLE.to_string()), 1227775554); + assert_eq!(part02a::solve(PUZZLE), 1227775554); } #[test] fn part02b() { - assert_eq!(part02b::solve(PUZZLE.to_string()), 4174379265); + assert_eq!(part02b::solve(PUZZLE), 4174379265); } } \ No newline at end of file diff --git a/src/day02/part02a.rs b/src/day02/part02a.rs index 40efe3e..49be90e 100644 --- a/src/day02/part02a.rs +++ b/src/day02/part02a.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; puzzle.split(",").for_each(|id_range| { diff --git a/src/day02/part02b.rs b/src/day02/part02b.rs index 710f8a3..41e3e72 100644 --- a/src/day02/part02b.rs +++ b/src/day02/part02b.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; puzzle.split(",").for_each(|id_range| { diff --git a/src/day03/mod.rs b/src/day03/mod.rs index 64289a0..f9d7d36 100644 --- a/src/day03/mod.rs +++ b/src/day03/mod.rs @@ -12,11 +12,11 @@ mod tests { #[test] fn part03a() { - assert_eq!(part03a::solve(PUZZLE.to_string()), 357); + assert_eq!(part03a::solve(PUZZLE), 357); } #[test] fn part03b() { - assert_eq!(part03b::solve(PUZZLE.to_string()), 3121910778619); + assert_eq!(part03b::solve(PUZZLE), 3121910778619); } } \ No newline at end of file diff --git a/src/day03/part03a.rs b/src/day03/part03a.rs index 72f83e1..042dd4e 100644 --- a/src/day03/part03a.rs +++ b/src/day03/part03a.rs @@ -1,6 +1,6 @@ use iter_first_max::IterFirstMaxExt; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; puzzle.lines().for_each(|battery_bank| { diff --git a/src/day03/part03b.rs b/src/day03/part03b.rs index 8ee8a7b..7486d8f 100644 --- a/src/day03/part03b.rs +++ b/src/day03/part03b.rs @@ -31,7 +31,7 @@ fn get_n_max(vec: &Vec, n: usize) -> Vec { max } -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; puzzle.lines().for_each(|battery_bank| { diff --git a/src/day04/common.rs b/src/day04/common.rs index 306982f..0d8f070 100644 --- a/src/day04/common.rs +++ b/src/day04/common.rs @@ -1,5 +1,5 @@ -pub fn parse_to_floor(input: String) -> Vec> { +pub fn parse_to_floor(input: &str) -> Vec> { let mut rows: Vec> = Vec::with_capacity(input.len() + 2); rows.push(vec![0u8; input.len()]); rows.append( diff --git a/src/day04/mod.rs b/src/day04/mod.rs index 69252e6..ae4f310 100644 --- a/src/day04/mod.rs +++ b/src/day04/mod.rs @@ -19,11 +19,11 @@ mod tests { #[test] fn part04a() { - assert_eq!(part04a::solve(PUZZLE.to_string()), 13); + assert_eq!(part04a::solve(PUZZLE), 13); } #[test] fn part04b() { - assert_eq!(part04b::solve(PUZZLE.to_string()), 43); + assert_eq!(part04b::solve(PUZZLE), 43); } } \ No newline at end of file diff --git a/src/day04/part04a.rs b/src/day04/part04a.rs index 4dc585f..d08a166 100644 --- a/src/day04/part04a.rs +++ b/src/day04/part04a.rs @@ -1,5 +1,5 @@ use crate::day04::common::{parse_to_floor, remove_if_possible}; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { remove_if_possible(&mut parse_to_floor(puzzle)).unwrap_or_else(|| 0) } diff --git a/src/day04/part04b.rs b/src/day04/part04b.rs index 0bc78cf..5c6c3bb 100644 --- a/src/day04/part04b.rs +++ b/src/day04/part04b.rs @@ -1,6 +1,6 @@ use crate::day04::common::{parse_to_floor, remove_if_possible}; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; let mut floor = parse_to_floor(puzzle); diff --git a/src/day05/mod.rs b/src/day05/mod.rs index 7f2c7de..00ce159 100644 --- a/src/day05/mod.rs +++ b/src/day05/mod.rs @@ -19,11 +19,11 @@ mod tests { #[test] fn part05a() { - assert_eq!(part05a::solve(PUZZLE.to_string()), 3); + assert_eq!(part05a::solve(PUZZLE), 3); } #[test] fn part05b() { - assert_eq!(part05b::solve(PUZZLE.to_string()), 14); + assert_eq!(part05b::solve(PUZZLE), 14); } } \ No newline at end of file diff --git a/src/day05/part05a.rs b/src/day05/part05a.rs index b23263e..24ad72e 100644 --- a/src/day05/part05a.rs +++ b/src/day05/part05a.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let (ranges, values) = puzzle.split_once("\n\n").unwrap(); let ranges = ranges .lines() diff --git a/src/day05/part05b.rs b/src/day05/part05b.rs index 937fdae..fc68e73 100644 --- a/src/day05/part05b.rs +++ b/src/day05/part05b.rs @@ -1,6 +1,6 @@ use itertools::Itertools; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let (ranges, _) = puzzle.split_once("\n\n").unwrap(); let mut last_end = u64::MIN; ranges diff --git a/src/day06/mod.rs b/src/day06/mod.rs index 512dc98..f6ed64f 100644 --- a/src/day06/mod.rs +++ b/src/day06/mod.rs @@ -12,11 +12,11 @@ mod tests { #[test] fn part06a() { - assert_eq!(part06a::solve(PUZZLE.to_string()), 4277556); + assert_eq!(part06a::solve(PUZZLE), 4277556); } #[test] fn part06b() { - assert_eq!(part06b::solve(PUZZLE.to_string()), 3263827); + assert_eq!(part06b::solve(PUZZLE), 3263827); } } diff --git a/src/day06/part06a.rs b/src/day06/part06a.rs index 2df842a..b86c19c 100644 --- a/src/day06/part06a.rs +++ b/src/day06/part06a.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut iters: Vec<_> = puzzle .lines() .map(|line| line.split_whitespace()) diff --git a/src/day06/part06b.rs b/src/day06/part06b.rs index fdf48ad..9c17cd0 100644 --- a/src/day06/part06b.rs +++ b/src/day06/part06b.rs @@ -20,7 +20,7 @@ where } -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; let lines = puzzle diff --git a/src/day07/mod.rs b/src/day07/mod.rs index 1f17067..fe29829 100644 --- a/src/day07/mod.rs +++ b/src/day07/mod.rs @@ -24,11 +24,11 @@ mod tests { #[test] fn part07a() { - assert_eq!(part07a::solve(PUZZLE.to_string()), 21); + assert_eq!(part07a::solve(PUZZLE), 21); } #[test] fn part07b() { - assert_eq!(part07b::solve(PUZZLE.to_string()), 40); + assert_eq!(part07b::solve(PUZZLE), 40); } } diff --git a/src/day07/part07a.rs b/src/day07/part07a.rs index 6f1c59d..cd6e1a3 100644 --- a/src/day07/part07a.rs +++ b/src/day07/part07a.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution = 0; let mut lines = puzzle.lines(); let mut source = lines diff --git a/src/day07/part07b.rs b/src/day07/part07b.rs index fd716cd..9475788 100644 --- a/src/day07/part07b.rs +++ b/src/day07/part07b.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution = 0; let mut lines = puzzle.lines(); let mut source = lines diff --git a/src/day08/mod.rs b/src/day08/mod.rs index 9a609ad..8f7f3cb 100644 --- a/src/day08/mod.rs +++ b/src/day08/mod.rs @@ -29,12 +29,12 @@ mod tests { #[test] #[ignore] fn part08a() { - assert_eq!(part08a::solve(PUZZLE.to_string()), 40); + assert_eq!(part08a::solve(PUZZLE), 40); } #[test] #[ignore] fn part08b() { - assert_eq!(part08b::solve(PUZZLE.to_string()), 0); + assert_eq!(part08b::solve(PUZZLE), 0); } } diff --git a/src/day08/part08a.rs b/src/day08/part08a.rs index 986c86a..79fd1ff 100644 --- a/src/day08/part08a.rs +++ b/src/day08/part08a.rs @@ -1,4 +1,4 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { 0 // TODO } diff --git a/src/day08/part08b.rs b/src/day08/part08b.rs index 986c86a..79fd1ff 100644 --- a/src/day08/part08b.rs +++ b/src/day08/part08b.rs @@ -1,4 +1,4 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { 0 // TODO } diff --git a/src/day09/mod.rs b/src/day09/mod.rs index 2aa472c..f5d1b5a 100644 --- a/src/day09/mod.rs +++ b/src/day09/mod.rs @@ -16,12 +16,12 @@ mod tests { #[test] fn part09a() { - assert_eq!(part09a::solve(PUZZLE.to_string()), 50); + assert_eq!(part09a::solve(PUZZLE), 50); } #[test] #[ignore] fn part09b() { - assert_eq!(part09b::solve(PUZZLE.to_string()), 24); + assert_eq!(part09b::solve(PUZZLE), 24); } } \ No newline at end of file diff --git a/src/day09/part09a.rs b/src/day09/part09a.rs index 5d61cf0..fcc7513 100644 --- a/src/day09/part09a.rs +++ b/src/day09/part09a.rs @@ -1,6 +1,6 @@ use std::ops::Add; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let mut solution: u64 = 0; let points = puzzle diff --git a/src/day09/part09b.rs b/src/day09/part09b.rs index 10fe1d8..38b3e29 100644 --- a/src/day09/part09b.rs +++ b/src/day09/part09b.rs @@ -1,5 +1,5 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { 0 // TODO } diff --git a/src/day10/mod.rs b/src/day10/mod.rs index 711d482..efe91bb 100644 --- a/src/day10/mod.rs +++ b/src/day10/mod.rs @@ -11,12 +11,12 @@ mod tests { #[test] fn part10a() { - assert_eq!(part10a::solve(PUZZLE.to_string()), 7); + assert_eq!(part10a::solve(PUZZLE), 7); } #[test] #[ignore] fn part10b() { - assert_eq!(part10b::solve(PUZZLE.to_string()), 0); + assert_eq!(part10b::solve(PUZZLE), 0); } } \ No newline at end of file diff --git a/src/day10/part10a.rs b/src/day10/part10a.rs index 2ec13c5..8153453 100644 --- a/src/day10/part10a.rs +++ b/src/day10/part10a.rs @@ -33,7 +33,7 @@ fn find_least_combinations + Eq + Default + Copy>(pre_press: min_preferring_some(max_pressed, max_unpressed) } -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { puzzle .lines() .map(|line| { diff --git a/src/day10/part10b.rs b/src/day10/part10b.rs index 986c86a..79fd1ff 100644 --- a/src/day10/part10b.rs +++ b/src/day10/part10b.rs @@ -1,4 +1,4 @@ -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { 0 // TODO } diff --git a/src/day11/mod.rs b/src/day11/mod.rs index 7750407..187be71 100644 --- a/src/day11/mod.rs +++ b/src/day11/mod.rs @@ -19,12 +19,12 @@ iii: out"; #[test] fn part11a() { - assert_eq!(part11a::solve(PUZZLE.to_string()), 5); + assert_eq!(part11a::solve(PUZZLE), 5); } #[test] #[ignore] fn part11b() { - assert_eq!(part11b::solve(PUZZLE.to_string()), 0); + assert_eq!(part11b::solve(PUZZLE), 0); } } \ No newline at end of file diff --git a/src/day11/part11a.rs b/src/day11/part11a.rs index 7d780e0..cceba3e 100644 --- a/src/day11/part11a.rs +++ b/src/day11/part11a.rs @@ -1,7 +1,7 @@ use crate::day11::common::{parse_node_graph}; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let node_graph = parse_node_graph(&puzzle); node_graph.get(&"you".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()).unwrap().borrow().find_route_to_cont("out".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()) as u64 diff --git a/src/day11/part11b.rs b/src/day11/part11b.rs index 0641182..e9d458b 100644 --- a/src/day11/part11b.rs +++ b/src/day11/part11b.rs @@ -1,7 +1,7 @@ use crate::day11::common::{parse_node_graph}; -pub fn solve(puzzle: String) -> u64 { +pub fn solve(puzzle: &str) -> u64 { let node_graph = parse_node_graph(&puzzle); node_graph.get(&"you".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()).unwrap().borrow().find_route_to_cont("out".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()) as u64 diff --git a/src/main.rs b/src/main.rs index f0fca35..01e8b81 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,7 @@ fn main() { file.write_all(b"# Advent of Code 2025\n```bash\n") .expect("Cannot write to file"); - let exercises: Vec<(&str, fn(String) -> u64, &str)> = vec![ + let exercises: Vec<(&str, fn(&str) -> u64, &str)> = vec![ ("day01:A", day01::part01a::solve, "puzzles/input01.txt"), ("day01:B", day01::part01a::solve, "puzzles/input01.txt"), ("day02:A", day02::part02a::solve, "puzzles/input02.txt"), @@ -58,7 +58,7 @@ fn main() { let solution = format!( "{:7} => {:15} ({:6}us)\n", day, - func(file_content), + func(&file_content), day_start.elapsed().as_micros() ); print!("{}", solution);