my solutions to advent of code
aoc advent-of-code

day 2 2025 in rust it's so ugly

aylac.top 8e4c8f54 bbca61b5

verified
Changed files
+71
2025
+7
2025/2/rust/Cargo.lock
···
+
# This file is automatically @generated by Cargo.
+
# It is not intended for manual editing.
+
version = 4
+
+
[[package]]
+
name = "rust"
+
version = "0.1.0"
+6
2025/2/rust/Cargo.toml
···
+
[package]
+
name = "rust"
+
version = "0.1.0"
+
edition = "2024"
+
+
[dependencies]
+58
2025/2/rust/src/main.rs
···
+
struct Range {
+
start: u64,
+
end: u64,
+
}
+
+
fn main() {
+
let input: Vec<Range> = std::fs::read_to_string("../input.txt")
+
.expect("invalid input!!")
+
.trim()
+
.split(",")
+
.map(|v| {
+
let range: Vec<&str> = v.split("-").collect();
+
match range[..] {
+
[start, end] => Range {
+
start: start.parse().expect("invalid number"),
+
end: end.parse().expect("invalid number"),
+
},
+
_ => panic!("bad input!"),
+
}
+
})
+
.collect();
+
+
let part_1 = &input.iter().fold(0_u64, |acc, v| {
+
(v.start..=v.end).fold(acc, |acc, n| {
+
if n <= 10 {
+
return acc;
+
}
+
let len = n.ilog10() + 1;
+
if len % 2 == 1 {
+
return acc;
+
}
+
let pow = 10_u64.pow(len / 2);
+
if n / pow == n % pow {
+
return acc + n;
+
}
+
acc
+
})
+
});
+
println!("{}", part_1);
+
+
let part_2 = &input.iter().fold(0_u64, |acc, v| {
+
(v.start..=v.end).fold(acc, |acc, n| {
+
if n <= 10 {
+
return acc;
+
}
+
let len = n.ilog10() + 1;
+
match (1..=len / 2).rfind(|clen| {
+
let num = n % 10_u64.pow(*clen);
+
let res = (0..len / clen).fold(0, |acc, i| acc + num * 10_u64.pow(i * clen));
+
res == n
+
}) {
+
Some(_) => acc + n,
+
_ => acc,
+
}
+
})
+
});
+
println!("{}", part_2);
+
}