From cd1260057d371004ac6298accf53c2cb11f9a3f0 Mon Sep 17 00:00:00 2001 From: Bearmine Date: Fri, 6 Jun 2025 10:51:04 -0500 Subject: [PATCH] Day 7 parse input --- day_07/small_input.txt | 9 +++++ day_07/src/main.rs | 78 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 day_07/small_input.txt diff --git a/day_07/small_input.txt b/day_07/small_input.txt new file mode 100644 index 0000000..fc6e099 --- /dev/null +++ b/day_07/small_input.txt @@ -0,0 +1,9 @@ +190: 10 19 +3267: 81 40 27 +83: 17 5 +156: 15 6 +7290: 6 8 6 15 +161011: 16 10 13 +192: 17 8 14 +21037: 9 7 18 13 +292: 11 6 16 20 diff --git a/day_07/src/main.rs b/day_07/src/main.rs index e7a11a9..e604e83 100644 --- a/day_07/src/main.rs +++ b/day_07/src/main.rs @@ -1,3 +1,77 @@ -fn main() { - println!("Hello, world!"); +// https://adventofcode.com/2024/day/7 +// +// Run command: cargo run ./input.txt + +use std::{ + env, + error::Error, + fs::File, + io::{BufReader, prelude::*}, + path::Component, + sync::RwLockWriteGuard, +}; + +#[derive(Debug)] +enum Ops { + Multiply, + Add, +} + +#[derive(Debug)] +struct Equation { + answer: i32, + components: Vec, +} + +impl Equation { + fn new(equation_str: &str) -> Result { + let split_equation: Vec<_> = equation_str.split(":").collect(); + if split_equation.len() != 2 { + return Err(format!("Invalid equation string: {}", equation_str)); + } + let answer = match split_equation[0].parse() { + Ok(a) => a, + Err(_) => { + return Err(format!( + "Error parsing answer {} in equation: {}", + split_equation[0], equation_str + )); + } + }; + let components = split_equation[1] + .split_whitespace() + .map(|c| match c.parse::() { + Ok(a) => Ok(a), + Err(_) => Err(format!( + "Error parsing component {} in equation: {}", + c, equation_str + )), + }) + .collect::, String>>()?; + Ok(Equation { answer, components }) + } +} + +fn main() -> Result<(), Box> { + // Handle command input + let args: Vec = env::args().collect(); + if args.len() != 2 { + panic!( + "{} must be run with a single argument of file name!", + &args[0] + ) + } + let input_file = &args[1]; + + let file = File::open(input_file)?; + let buffer = BufReader::new(file); + + let mut equations = Vec::new(); + for line in buffer.lines() { + let line = line?; + equations.push(Equation::new(&line)?) + } + + println!("{:?}", equations); + Ok(()) }