2025/day-06: Solve part 1

This commit is contained in:
SebastianStork 2025-12-06 19:57:32 +01:00
parent 5929ef6b97
commit 5bb9bcc7b3
Signed by: SebastianStork
SSH key fingerprint: SHA256:tRrGdjYOwgHxpSc/wTOZQZEjxcb15P0tyXRsbAfd+2Q
4 changed files with 93 additions and 3 deletions

7
2025/rust/day-06/Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "day-06"
version = "0.1.0"

View file

@ -0,0 +1,6 @@
[package]
name = "day-06"
version = "0.1.0"
edition = "2024"
[dependencies]

View file

@ -0,0 +1,77 @@
use std::{fmt::Debug, fs};
#[derive(PartialEq, Debug)]
enum Operation {
Add,
Multiply,
}
#[derive(Debug)]
struct Problem {
numbers: Vec<u64>,
operation: Operation,
}
impl Problem {
fn solve(&self) -> u64 {
if self.operation == Operation::Add {
self.numbers.iter().sum()
} else {
self.numbers.iter().product()
}
}
}
fn main() {
let problems = parse_input(&fs::read_to_string("../../inputs/06.txt").unwrap());
println!("Grand total: {}", grand_total(&problems));
}
fn parse_input(contents: &str) -> Vec<Problem> {
let grid: Vec<Vec<&str>> = contents
.trim()
.lines()
.map(|line| line.split_whitespace().collect())
.collect();
let mut list: Vec<Problem> = Vec::new();
for (col, _) in grid[0].iter().enumerate() {
let mut numbers: Vec<u64> = Vec::new();
let operation = match grid[grid.len() - 1][col] {
"+" => Operation::Add,
"*" => Operation::Multiply,
_ => panic!("Unsupported Operation"),
};
for (row, _) in grid[..grid.len() - 1].iter().enumerate() {
numbers.push(grid[row][col].parse().unwrap());
}
list.push(Problem { numbers, operation });
}
list
}
fn grand_total(problems: &[Problem]) -> u64 {
problems.iter().map(Problem::solve).sum()
}
#[cfg(test)]
mod tests {
use super::*;
const TEST_INPUT: &str = "
123 328 51 64
45 64 387 23
6 98 215 314
* + * + ";
#[test]
fn test_part1() {
assert_eq!(grand_total(&parse_input(TEST_INPUT)), 4277556);
}
}