use utils::load_string; const TEST_INPUT: &str = "L68 L30 R48 L5 R60 L55 L1 L99 R14 L82"; const START: u32 = 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 = &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; }, 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; }, } if current_rotation == 0 { result_part1 += 1; } } (result_part1, result_part2) } pub fn part1() -> u32 { gaby().0 } pub fn part2() -> u32 { gaby().1 }