diff --git a/AoC_2025/src/days/day02.rs b/AoC_2025/src/days/day02.rs new file mode 100644 index 0000000..e3b3b5a --- /dev/null +++ b/AoC_2025/src/days/day02.rs @@ -0,0 +1,51 @@ +use crate::days::Solution; + +pub struct Day02; + +impl Solution for Day02 { + type Input = Vec<(usize, usize)>; + + fn parse(&self, data: &str) -> Self::Input { + data.split("\n") + .next() + .unwrap() + .split(",") + .map(|s| { + let mut ints = s.split("-").map(|x| x.parse::()); + (ints.next().unwrap().unwrap(), ints.next().unwrap().unwrap()) + }) + .collect() + } + + fn part1(&self, input: &Self::Input) -> usize { + input + .iter() + .map(|(start, end)| { + (*start..=*end) + .map(|x| x.to_string()) + .filter(|s| { + let len = s.len(); + len % 2 == 0 && s[..len / 2] == s[len / 2..] + }) + .map(|s| s.parse::().unwrap()) + .sum::() + }) + .sum() + } + + fn part2(&self, input: &Self::Input) -> usize { + input + .iter() + .map(|(start, end)| { + (*start..=*end) + .map(|x| x.to_string()) + .filter(|s| { + let len = s.len(); + (1..=len / 2).any(|n| len % n == 0 && s == &s[..n].repeat(len / n)) + }) + .map(|s| s.parse::().unwrap()) + .sum::() + }) + .sum() + } +}