use utils::load_string; const TEST_INPUT: &str = "L68 L30 R48 L5 R60 L55 L1 L99 R14 L82"; const START: i32 = 50; enum Rotation { Left(u32), Right(u32), } fn parse(input: &str) -> Vec { 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() } fn gaby() -> (u32, u32) { let input = TEST_INPUT; let input = &load_string("inputs/2025/day1.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) => { for _ in 0..*amount { current_rotation -= 1; if current_rotation < 0 { current_rotation = 99; } if current_rotation == 0 { result_part2 += 1; } } } Rotation::Right(amount) => { 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) } pub fn part1() -> u32 { gaby().0 } pub fn part2() -> u32 { gaby().1 }