this repo has no description
at main 46 lines 1.2 kB view raw
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}