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

skibidi

aylac.top a43fafba 91bd5499

verified
Changed files
+31 -32
2025
2
rust
src
+31 -32
2025/2/rust/src/main.rs
···
let powers_of_ten: Vec<u64> = (0..=MAX_LENGTH as u32).map(|i| 10_u64.pow(i)).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 [invalid_part_1, invalid_part_2] = {
+
let mut part_1: HashSet<u64> = HashSet::new();
+
let mut part_2: HashSet<u64> = HashSet::new();
+
+
for len in 1..=MAX_LENGTH / 2 {
+
// 1-9, 10-99, 100-999, 100000-999999
+
for combination in
+
*powers_of_ten.get(len - 1).unwrap_or(&1)..*powers_of_ten.get(len).unwrap()
+
{
+
let mut number = 0;
+
// 0 is just the number (9), 1 is one repetition (99)
+
for repeat in 0..MAX_LENGTH / len {
+
number += combination * powers_of_ten.get((len * repeat) as usize).unwrap();
+
if repeat > 0 {
+
part_2.insert(number);
+
}
+
if repeat == 1 {
+
part_1.insert(number);
+
}
+
}
}
-
let len = (n.ilog10() + 1) as usize;
-
if len % 2 == 1 {
-
return acc;
-
}
-
let pow = powers_of_ten.get(len / 2).unwrap();
-
if n / pow == n % pow {
-
return acc + n;
-
}
+
}
+
+
[part_1, part_2]
+
};
+
+
let part_1 = invalid_part_1.iter().fold(0, |acc, number| {
+
if input.iter().any(|r| *number >= r.start && *number <= r.end) {
+
acc + number
+
} else {
acc
-
})
+
}
});
println!("{}", part_1);
-
let mut part_2_invalid: HashSet<u64> = HashSet::new();
-
for len in 1..=MAX_LENGTH / 2 {
-
// 1-9, 10-99, 100-999, 100000-999999
-
for combination in
-
*powers_of_ten.get(len - 1).unwrap_or(&1)..*powers_of_ten.get(len).unwrap()
-
{
-
let mut number = 0;
-
// 0 is just the number (9), 1 is one repetition (99)
-
for repeat in 0..MAX_LENGTH / len {
-
number += combination * powers_of_ten.get((len * repeat) as usize).unwrap();
-
if repeat > 0 {
-
part_2_invalid.insert(number);
-
}
-
}
-
}
-
}
-
let part_2_invalid = part_2_invalid;
-
-
let part_2 = part_2_invalid.iter().fold(0, |acc, number| {
+
let part_2 = invalid_part_2.iter().fold(0, |acc, number| {
if input.iter().any(|r| *number >= r.start && *number <= r.end) {
acc + number
} else {