Solve 2025 day 1 part 2 in rust

This commit is contained in:
SebastianStork 2025-12-01 15:43:14 +01:00
parent d14d435b0a
commit e2af8dddbe
Signed by: SebastianStork
SSH key fingerprint: SHA256:iEM011ogNMG1q8+U500adGu/9rpPuZ2KnFtbdLeqTiI

View file

@ -1,12 +1,13 @@
use std::fs::{self}; use std::fs::{self};
fn main() { fn main() {
let rotations = read_input(); let rotations = read_rotations();
println!("Password: {}", count_neutral_positions(rotations)); println!("Password1: {}", count_zero_positions(&rotations));
println!("Password2: {}", count_zero_clicks(&rotations));
} }
fn read_input() -> Vec<i32> { fn read_rotations() -> Vec<i32> {
let contents = fs::read_to_string("../../inputs/01.txt").unwrap(); let contents = fs::read_to_string("../../inputs/01.txt").unwrap();
let lines = contents.lines(); let lines = contents.lines();
@ -18,7 +19,7 @@ fn read_input() -> Vec<i32> {
let distance = distance.parse::<i32>().unwrap(); let distance = distance.parse::<i32>().unwrap();
let rotation = match direction { let rotation = match direction {
"L" => distance * -1, "L" => -distance,
"R" => distance, "R" => distance,
_ => panic!(), _ => panic!(),
}; };
@ -29,12 +30,12 @@ fn read_input() -> Vec<i32> {
rotations rotations
} }
fn count_neutral_positions(rotations: Vec<i32>) -> i32 { fn count_zero_positions(rotations: &Vec<i32>) -> i32 {
let mut counter = 0; let mut counter = 0;
let mut position = 50; let mut position = 50;
for rotation in rotations { for rotation in rotations {
position = (position + rotation) % 100; position = (position + rotation).rem_euclid(100);
if position == 0 { if position == 0 {
counter += 1; counter += 1;
@ -43,3 +44,24 @@ fn count_neutral_positions(rotations: Vec<i32>) -> i32 {
counter counter
} }
fn count_zero_clicks(rotations: &Vec<i32>) -> i32 {
let mut counter = 0;
let mut position = 50;
for rotation in rotations {
position += rotation;
counter += (position / 100).abs();
if position < 0 && position != *rotation {
counter += 1;
}
if position == 0 {
counter += 1;
}
position = position.rem_euclid(100);
}
counter
}