diff --git a/2025/rust/day-03/Cargo.lock b/2025/rust/day-03/Cargo.lock new file mode 100644 index 0000000..2fb4504 --- /dev/null +++ b/2025/rust/day-03/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "day-03" +version = "0.1.0" diff --git a/2025/rust/day-03/Cargo.toml b/2025/rust/day-03/Cargo.toml new file mode 100644 index 0000000..37be22b --- /dev/null +++ b/2025/rust/day-03/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-03" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/2025/rust/day-03/src/main.rs b/2025/rust/day-03/src/main.rs new file mode 100644 index 0000000..693512b --- /dev/null +++ b/2025/rust/day-03/src/main.rs @@ -0,0 +1,51 @@ +use std::fs; + +fn main() { + let banks = parse_input(&fs::read_to_string("../../inputs/03.txt").unwrap()); + + println!("Total output joltage: {}", total_joltage(banks)); +} + +fn parse_input(contents: &str) -> Vec> { + contents + .trim() + .lines() + .map(|line: &str| line.bytes().map(|b| b - b'0').collect()) + .collect() +} + +fn total_joltage(banks: Vec>) -> u32 { + banks.iter().map(|bank| largest_joltage(bank)).sum() +} + +fn largest_joltage(batteries: &[u8]) -> u32 { + let mut first = batteries[0]; + let mut second = batteries[1]; + + for i in 1..batteries.len() - 1 { + if batteries[i] > first { + first = batteries[i]; + second = batteries[i + 1]; + } else if batteries[i + 1] > second { + second = batteries[i + 1]; + } + } + + (first * 10 + second) as u32 +} + +#[cfg(test)] +mod tests { + use super::*; + + const TEST_INPUT: &str = "987654321111111 +811111111111119 +234234234234278 +818181911112111 +"; + + #[test] + fn test_part1() { + assert_eq!(total_joltage(parse_input(TEST_INPUT)), 357); + } +} diff --git a/flake.lock b/flake.lock index 75d7f65..90110f9 100644 --- a/flake.lock +++ b/flake.lock @@ -3,10 +3,10 @@ "inputs": { "flake": false, "locked": { - "lastModified": 1764710882, - "narHash": "sha256-lgnEbzbtGf7XYe9gCOhOJtLgpmosv6i8S11MTOy6o2k=", + "lastModified": 1764767558, + "narHash": "sha256-AqEynDX4eu61liwLdGPzk0b6J9sE+dKWSpxfO+mZpBc=", "ref": "refs/heads/main", - "rev": "9e2bfce3c17983bc850271e3bcc89045e82d9b7c", + "rev": "a1a4c48fcc3eddac81d35ce2030c887ac38f4002", "shallow": true, "type": "git", "url": "ssh://git@github.com/SebastianStork/advent-of-code-inputs.git"