commit 8998f2bd64ffa15b74fe7bd4d40ea74fddd796e6 Author: Jason Date: Sat Dec 6 16:51:07 2025 -0600 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e0f6884 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +**/test.txt +**/input.txt \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..25df959 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "aoc2025" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..cfe6cd5 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc2025" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/day6/mod.rs b/src/day6/mod.rs new file mode 100644 index 0000000..1d720e7 --- /dev/null +++ b/src/day6/mod.rs @@ -0,0 +1,99 @@ +use std::{fs::File, io::Read}; + +pub fn part_1(file:&str) -> u64 { + let mut directory = "/home/jason/Programming/Rust/aoc2025/src/day6/".to_owned(); + directory.push_str(file); + let mut handle = File::open(directory).unwrap(); + let mut file = String::new(); + handle.read_to_string(&mut file).unwrap(); + + let mut file_iter = file.lines().rev(); + let mut problems: Vec = Vec::new(); + + for elem in file_iter.next().unwrap().split_whitespace() { + let op = match elem.chars().next().unwrap() { + '+' => {Operator::Add}, + '*' => {Operator::Multiply}, + _ => panic!("Encountered unhandled char!") + }; + + problems.push(Problem { numbers: Vec::new(), operator: op }); + } + + for lines in file_iter { + for (pos, num) in lines.split_whitespace().enumerate() { + let value = num.parse::().unwrap(); + problems[pos].numbers.push(value); + } + } + + let solution = problems.iter().fold(0, |acc, x| { + let n = match x.operator { + Operator::Add => x.numbers.iter().sum::(), + Operator::Multiply => x.numbers.iter().product::(), + }; + n+acc + }); + + solution +} + +pub fn part_2(file:&str) -> u64 { + let mut directory = "/home/jason/Programming/Rust/aoc2025/src/day6/".to_owned(); + directory.push_str(file); + let mut handle = File::open(directory).unwrap(); + let mut file = String::new(); + handle.read_to_string(&mut file).unwrap(); + + let mut file_iter = file.lines().rev(); + let mut problems: Vec = Vec::new(); + + for elem in file_iter.next().unwrap().split_whitespace() { + let op = match elem.chars().next().unwrap() { + '+' => {Operator::Add}, + '*' => {Operator::Multiply}, + _ => panic!("Encountered unhandled char!") + }; + + problems.push(Problem { numbers: Vec::new(), operator: op }); + } + + for lines in file_iter { + for (pos, num) in lines.split_whitespace().enumerate() { + let value = num.parse::().unwrap(); + problems[pos].numbers.push(value); + } + } + + let solution = problems.iter().fold(0, |acc, x| { + let n = match x.operator { + Operator::Add => x.numbers.iter().sum::(), + Operator::Multiply => x.numbers.iter().product::(), + }; + n+acc + }); + + solution +} + +#[derive(Debug)] +struct Problem { + numbers: Vec, + operator: Operator, +} + +#[derive(Debug)] +enum Operator { + Add, + Multiply, +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + assert_eq!(part_1("test.txt"), 4277556); + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..cd5a018 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,6 @@ +mod day6; + +fn main() { + let d6p1 = day6::part_1("input.txt"); + println!("Day 6 Part 1 Solution: {}", d6p1); +} \ No newline at end of file