diff --git a/aoc2025/day1.rs b/aoc2025/day1.rs index 03d410e..30d102d 100644 --- a/aoc2025/day1.rs +++ b/aoc2025/day1.rs @@ -1,7 +1,6 @@ use utils::load_string; -const TEST_INPUT: &str = -"L68 +const TEST_INPUT: &str = "L68 L30 R48 L5 @@ -12,7 +11,7 @@ L99 R14 L82"; -const START: u32 = 50; +const START: i32 = 50; enum Rotation { Left(u32), @@ -20,41 +19,78 @@ enum Rotation { } fn parse(input: &str) -> Vec { - input.lines().map(|l| { + input + .lines() + .map(|l| { let (indicator, number) = l.split_at(1); match indicator { "L" => Rotation::Left(number.parse().unwrap()), "R" => Rotation::Right(number.parse().unwrap()), - _ => panic!("hey!") - } - }).collect() + _ => panic!("hey!"), + } + }) + .collect() } fn gaby() -> (u32, u32) { + let input = TEST_INPUT; let input = &load_string("inputs/2025/day1.input"); - //let input = TEST_INPUT; let mut current_rotation = START; let mut result_part1: u32 = 0; let mut result_part2: u32 = 0; + for roation in parse(input).iter() { match roation { Rotation::Left(amount) => { - // overflows to the left - let new = (current_rotation as i32) - *amount as i32; - current_rotation = new.rem_euclid(100) as u32; - result_part2 += ((new.abs() + if new < 0 {100} else {0}) / 100) as u32; - }, + for _ in 0..*amount { + current_rotation -= 1; + if current_rotation < 0 { + current_rotation = 99; + } + if current_rotation == 0 { + result_part2 += 1; + } + } + } Rotation::Right(amount) => { - // overflows to the right - let new = (current_rotation as i32) + *amount as i32; - current_rotation = new.rem_euclid(100) as u32; - result_part2 += (new / 100) as u32; - }, + for _ in 0..*amount { + current_rotation += 1; + if current_rotation >= 100 { + current_rotation = 0; + } + if current_rotation == 0 { + result_part2 += 1; + } + } + } } + if current_rotation == 0 { result_part1 += 1; } } + //for roation in parse(input).iter() { + // match roation { + // Rotation::Left(amount) => { + // // overflows to the left + // let new = (current_rotation as i32) - *amount as i32; + // result_part2 += (((new.abs() + if new <= 0 { 100 } else { 0 }) / 100) + // + if current_rotation == 0 { -1 } else { 0 }) + // .max(0) as u32; + // current_rotation = new.rem_euclid(100) as u32; + // } + // Rotation::Right(amount) => { + // // overflows to the right + // let new = (current_rotation as i32) + *amount as i32; + // result_part2 += + // ((new / 100) + if current_rotation == 0 { -1 } else { 0 }).max(0) as u32; + // current_rotation = new.rem_euclid(100) as u32; + // } + // } + // if current_rotation == 0 { + // result_part1 += 1; + // } + //} (result_part1, result_part2) }