this repo has no description
1use super::Day;
2use crate::day;
3
4fn invalid_id(n: &i64) -> bool {
5 let s = n.to_string();
6 s.len() % 2 == 0 && s[..s.len() / 2] == s[s.len() / 2..]
7}
8
9fn new_invalid_id(n: &i64) -> bool {
10 let s = n.to_string();
11 let b = s.as_bytes();
12 (1..s.len())
13 .rev()
14 .filter(|&d| s.len() % d == 0)
15 .any(|d| b.chunks(d).all(|c| c == &b[..d]))
16}
17
18day!(Day2, 2, Vec<(i64, i64)>);
19
20impl Day for Day2 {
21 type Parsed = Vec<(i64, i64)>;
22
23 fn parse(input: &'static str) -> Self::Parsed {
24 input
25 .split(',')
26 .map(|range| {
27 let (n1, n2) = range.split_once('-').unwrap();
28 let (n1, n2) = (n1.parse::<i64>().unwrap(), n2.parse::<i64>().unwrap());
29 (n1, n2)
30 })
31 .collect()
32 }
33 // 19386344315
34 fn part1(&self) -> i64 {
35 self.data.iter().fold(0, |acc, (n1, n2)| {
36 (*n1..=*n2).filter(|x| invalid_id(x)).sum::<i64>() + acc
37 })
38 }
39
40 // 34421651192
41 fn part2(&self) -> i64 {
42 self.data.iter().fold(0, |acc, (n1, n2)| {
43 (*n1..=*n2).filter(|x| new_invalid_id(x)).sum::<i64>() + acc
44 })
45 }
46}