+3
-16
2025/src/days/two/mod.rs
+3
-16
2025/src/days/two/mod.rs
···
28
pub fn part_a(input: Vec<u64>) -> usize {
29
input.iter().fold(0, |acc, x| {
30
acc + if is_valid_id_a(x.clone()) {
31
-
0usize
32
} else {
33
*x as usize
34
}
35
})
36
}
37
38
-
fn num_digits(mut n: u64) -> u32 {
39
-
if n == 0 {
40
-
return 1;
41
-
}
42
-
let mut digits = 0;
43
-
while n > 0 {
44
-
digits += 1;
45
-
n /= 10;
46
-
}
47
-
digits
48
-
}
49
-
50
fn is_valid_id_a(id: u64) -> bool {
51
// invalid ID's are identifiable due to them being made up from some sequences being repeated
52
// eg: 11 -> [1, 1] invalid
53
// eg: 123123 -> [123, 123] invalid
54
// eg: 123456 -> [123456] valid
55
-
let digits = num_digits(id);
56
if digits % 2 == 1 {
57
return true;
58
}
59
60
-
let half = digits / 2;
61
-
let div = 10u64.pow(half);
62
63
let left = id / div;
64
let right = id % div;
···
28
pub fn part_a(input: Vec<u64>) -> usize {
29
input.iter().fold(0, |acc, x| {
30
acc + if is_valid_id_a(x.clone()) {
31
+
0
32
} else {
33
*x as usize
34
}
35
})
36
}
37
38
fn is_valid_id_a(id: u64) -> bool {
39
// invalid ID's are identifiable due to them being made up from some sequences being repeated
40
// eg: 11 -> [1, 1] invalid
41
// eg: 123123 -> [123, 123] invalid
42
// eg: 123456 -> [123456] valid
43
+
let digits = id.ilog10() + 1;
44
if digits % 2 == 1 {
45
return true;
46
}
47
48
+
let div = 10u64.pow(digits / 2);
49
50
let left = id / div;
51
let right = id % div;