From 0645f39e51f877dad1abee11471eb22d4bdc2d56 Mon Sep 17 00:00:00 2001 From: Andrew Glaze Date: Mon, 18 Dec 2023 11:50:21 -0500 Subject: [PATCH] update day9 --- old/day09/Cargo.lock | 7 ---- old/day09/Cargo.toml | 8 ---- old/day09/src/main.rs | 70 ----------------------------------- src/day9.rs | 85 +++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 5 files changed, 86 insertions(+), 85 deletions(-) delete mode 100644 old/day09/Cargo.lock delete mode 100644 old/day09/Cargo.toml delete mode 100644 old/day09/src/main.rs create mode 100644 src/day9.rs diff --git a/old/day09/Cargo.lock b/old/day09/Cargo.lock deleted file mode 100644 index 8aa567a..0000000 --- a/old/day09/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "day09" -version = "0.1.0" diff --git a/old/day09/Cargo.toml b/old/day09/Cargo.toml deleted file mode 100644 index 15d9cf9..0000000 --- a/old/day09/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "day09" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] diff --git a/old/day09/src/main.rs b/old/day09/src/main.rs deleted file mode 100644 index 745222c..0000000 --- a/old/day09/src/main.rs +++ /dev/null @@ -1,70 +0,0 @@ -use std::fs; - -fn main() { - let input = fs::read_to_string("input.txt").unwrap(); - let input: Vec<_> = input.split('\n') - .map(|line| { - line.split_whitespace() - .map(|num| num.parse::().unwrap()) - .collect::>() - }).collect(); - - let mut total = 0; - - for line in input { - let mut line_starters: Vec = vec![*line.first().unwrap()]; - let mut cur_line: Vec = line; - while !cur_line.iter().all(|x| *x == 0) { - let mut next_line: Vec = vec![]; - for i in 1..cur_line.len() { - let diff = cur_line[i] - cur_line[i-1]; - next_line.push(diff) - } - line_starters.push(*next_line.first().unwrap()); - cur_line = next_line; - } - - let mut sum = 0; - for i in (1..line_starters.len()).rev() { - sum = line_starters[i - 1] - sum; - } - total += sum; - } - println!("{:?}", total) -} - - -// use std::fs; - -// fn main() { -// let input = fs::read_to_string("input.txt").unwrap(); -// let input: Vec<_> = input.split('\n') -// .map(|line| { -// line.split_whitespace() -// .map(|num| num.parse::().unwrap()) -// .collect::>() -// }).collect(); - -// let mut total = 0; - -// for line in input { -// let mut line_enders: Vec = vec![*line.last().unwrap()]; -// let mut cur_line: Vec = line; -// while !cur_line.iter().all(|x| *x == 0) { -// let mut next_line: Vec = vec![]; -// for i in 1..cur_line.len() { -// let diff = cur_line[i] - cur_line[i-1]; -// next_line.push(diff) -// } -// line_enders.push(*next_line.last().unwrap()); -// cur_line = next_line; -// } - -// let mut sum = 0; -// for i in (1..line_enders.len()).rev() { -// sum = sum + line_enders[i - 1]; -// } -// total += sum; -// } -// println!("{:?}", total) -// } diff --git a/src/day9.rs b/src/day9.rs new file mode 100644 index 0000000..f0c256b --- /dev/null +++ b/src/day9.rs @@ -0,0 +1,85 @@ +use aoc_runner_derive::{aoc, aoc_generator}; +#[aoc_generator(day9)] +fn parse(input: &str) -> Vec> { + let input: Vec<_> = input.split('\n') + .map(|line| { + line.split_whitespace() + .map(|num| num.parse::().unwrap()) + .collect::>() + }).collect(); + + input +} + +#[aoc(day9, part1)] +fn part1(input: &Vec>) -> i64 { + let mut total = 0; + + for line in input { + let mut line_enders: Vec = vec![*line.last().unwrap()]; + let mut cur_line: Vec = line.to_vec(); + while !cur_line.iter().all(|x| *x == 0) { + let mut next_line: Vec = vec![]; + for i in 1..cur_line.len() { + let diff = cur_line[i] - cur_line[i-1]; + next_line.push(diff) + } + line_enders.push(*next_line.last().unwrap()); + cur_line = next_line; + } + + let mut sum = 0; + for i in (1..line_enders.len()).rev() { + sum = sum + line_enders[i - 1]; + } + total += sum; + } + + total +} + +#[aoc(day9, part2)] +fn part2(input: &Vec>) -> i64 { + let mut total = 0; + + for line in input { + let mut line_starters: Vec = vec![*line.first().unwrap()]; + let mut cur_line: Vec = line.to_vec(); + while !cur_line.iter().all(|x| *x == 0) { + let mut next_line: Vec = vec![]; + for i in 1..cur_line.len() { + let diff = cur_line[i] - cur_line[i-1]; + next_line.push(diff) + } + line_starters.push(*next_line.first().unwrap()); + cur_line = next_line; + } + + let mut sum = 0; + for i in (1..line_starters.len()).rev() { + sum = line_starters[i - 1] - sum; + } + total += sum; + } + total +} + + +#[cfg(test)] +mod tests { + use super::*; + + const EX: &str = r"0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45"; + + #[test] + fn part1_example() { + assert_eq!(part1(&parse(EX)), 114); + } + + #[test] + fn part2_example() { + assert_eq!(part2(&parse(EX)), 2); + } +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 3341d48..dff261b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +mod day9; mod day8; mod day7; mod day6;