From 99554bc83b76852836e9acf6d51fd2e3fbcb258a Mon Sep 17 00:00:00 2001 From: SebastianStork Date: Mon, 1 Dec 2025 16:16:28 +0100 Subject: [PATCH] Improve 2025 day 1 in rust --- 2025/rust/day-01/src/main.rs | 49 ++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/2025/rust/day-01/src/main.rs b/2025/rust/day-01/src/main.rs index ca04183..d8a8346 100644 --- a/2025/rust/day-01/src/main.rs +++ b/2025/rust/day-01/src/main.rs @@ -1,5 +1,8 @@ use std::fs::{self}; +const STARTING_POSITION: i32 = 50; +const DIAL_RANGE: i32 = 100; + fn main() { let rotations = read_rotations(); @@ -8,34 +11,26 @@ fn main() { } fn read_rotations() -> Vec { - let contents = fs::read_to_string("../../inputs/01.txt").unwrap(); - let lines = contents.lines(); - - let mut rotations = vec![]; - - for line in lines { - let (direction, distance) = line.split_at(1); - - let distance = distance.parse::().unwrap(); - - let rotation = match direction { - "L" => -distance, - "R" => distance, - _ => panic!(), - }; - - rotations.push(rotation); - } - - rotations + fs::read_to_string("../../inputs/01.txt") + .unwrap() + .lines() + .map(|line| { + let distance = line[1..].parse::().unwrap(); + if line.starts_with('L') { + -distance + } else { + distance + } + }) + .collect() } -fn count_zero_positions(rotations: &Vec) -> i32 { +fn count_zero_positions(rotations: &[i32]) -> i32 { let mut counter = 0; - let mut position = 50; + let mut position = STARTING_POSITION; for rotation in rotations { - position = (position + rotation).rem_euclid(100); + position = (position + rotation).rem_euclid(DIAL_RANGE); if position == 0 { counter += 1; @@ -45,14 +40,14 @@ fn count_zero_positions(rotations: &Vec) -> i32 { counter } -fn count_zero_clicks(rotations: &Vec) -> i32 { +fn count_zero_clicks(rotations: &[i32]) -> i32 { let mut counter = 0; - let mut position = 50; + let mut position = STARTING_POSITION; for rotation in rotations { position += rotation; - counter += (position / 100).abs(); + counter += (position / DIAL_RANGE).abs(); if position < 0 && position != *rotation { counter += 1; } @@ -60,7 +55,7 @@ fn count_zero_clicks(rotations: &Vec) -> i32 { counter += 1; } - position = position.rem_euclid(100); + position = position.rem_euclid(DIAL_RANGE); } counter