tangled
alpha
login
or
join now
nove.dev
/
aoc-2025
1
fork
atom
:)
1
fork
atom
overview
issues
pulls
pipelines
day2 part2
nove.dev
3 months ago
1688301c
0e2b3661
+29
1 changed file
expand all
collapse all
unified
split
src
lib.rs
+29
src/lib.rs
···
65
65
let invalid_sum: u64 = invalid.sum();
66
66
invalid_sum.to_string()
67
67
}
68
68
+
pub fn day2_part2(input: &str) -> String {
69
69
+
let ranges = parse(input);
70
70
+
let invalid = ranges.into_iter().flatten().filter(|&id| !is_id_doubly_valid(id));
71
71
+
let invalid_sum: u64 = invalid.sum();
72
72
+
invalid_sum.to_string()
73
73
+
}
68
74
fn parse(input: &str) -> Vec<RangeInclusive<u64>> {
69
75
input
70
76
.split(',')
···
82
88
first_half != second_half
83
89
}
84
90
}
91
91
+
fn is_id_doubly_valid(id: u64) -> bool {
92
92
+
let chars = id.to_string().chars().collect::<Vec<char>>();
93
93
+
let charnum = chars.len();
94
94
+
for chunk_count in 2..=charnum {
95
95
+
if charnum % chunk_count != 0 {
96
96
+
continue;
97
97
+
}
98
98
+
let chunks = chars.chunks_exact(charnum / chunk_count).collect::<Vec<_>>();
99
99
+
if chunks.iter().all(|&chunk| chunk == chunks[0]) {
100
100
+
return false
101
101
+
}
102
102
+
}
103
103
+
true
104
104
+
}
85
105
}
86
106
87
107
#[cfg(test)]
88
108
mod tests {
89
109
use super::*;
90
110
111
111
+
#[ignore]
91
112
#[test]
92
113
fn day2_part1_test() {
93
114
let test_result = day2::day2_part1(include_str!("../input/day2.test.txt"));
94
115
assert_eq!(test_result, "1227775554");
95
116
let result = day2::day2_part1(include_str!("../input/day2.txt"));
96
117
assert_eq!(result, "38158151648");
118
118
+
}
119
119
+
#[ignore]
120
120
+
#[test]
121
121
+
fn day2_part2_test() {
122
122
+
let test_result = day2::day2_part2(include_str!("../input/day2.test.txt"));
123
123
+
assert_eq!(test_result, "4174379265");
124
124
+
let result = day2::day2_part2(include_str!("../input/day2.txt"));
125
125
+
assert_eq!(result, "45283684555");
97
126
}
98
127
99
128
#[test]