57 lines
1.3 KiB
Rust
57 lines
1.3 KiB
Rust
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<Rotation> {
|
|
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()
|
|
}
|
|
|
|
pub fn part1() -> u32 {
|
|
let input = &load_string("inputs/2025/day1.input");
|
|
//let input = TEST_INPUT;
|
|
let mut current_rotation = START;
|
|
let mut result: u32 = 0;
|
|
for roation in parse(input).iter() {
|
|
match roation {
|
|
Rotation::Left(amount) => {
|
|
// overflows to the left
|
|
current_rotation = (((current_rotation as i32) - *amount as i32).rem_euclid(100)) as u32;
|
|
},
|
|
Rotation::Right(amount) => {
|
|
// overflows to the right
|
|
current_rotation = (((current_rotation as i32) + *amount as i32).rem_euclid(100)) as u32;
|
|
},
|
|
}
|
|
if current_rotation == 0 {
|
|
result += 1;
|
|
}
|
|
}
|
|
result
|
|
}
|
|
pub fn part2() -> u32 {
|
|
0
|
|
}
|