From d65dda9e5b818bc1bae6aaf6453145e08f00e5b7 Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Sat, 6 Dec 2025 20:34:18 +0100 Subject: Initital commit Day01 - Day06 --- day02/src/main.rs | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 day02/src/main.rs (limited to 'day02/src/main.rs') diff --git a/day02/src/main.rs b/day02/src/main.rs new file mode 100644 index 0000000..ce21752 --- /dev/null +++ b/day02/src/main.rs @@ -0,0 +1,70 @@ +use std::io; + +struct Range { + start: i64, + end: i64, +} + +impl Range { + fn new<'a>(mut iter: impl DoubleEndedIterator) -> Self { + let start = iter.next().unwrap().parse::().unwrap(); + let end = iter.next().unwrap().parse::().unwrap(); + Self { start, end } + } +} + +fn is_invalid(value: i64) -> bool { + let tmp = value.to_string(); + /* + if tmp.len() % 2 != 0 { + return false + } + let (a, b) = tmp.split_at(tmp.len() / 2); + return a == b; + */ + for x in 1..=tmp.len() / 2 { + if tmp.len() % x != 0 { + continue; + } + let (first, rest) = tmp.split_at(x); + let mut rest2 = rest; + let mut all_match = true; + for _ in 0..tmp.len() / x - 1 { + match rest2.strip_prefix(first) { + Some(value) => rest2 = value, + None => { + all_match = false; + break; + } + }; + } + if all_match { + return true; + } + } + false +} + +fn invalid(range: &Range) -> i64 { + let mut total = 0; + for i in range.start..=range.end { + if is_invalid(i) { + total += i; + } + } + total +} + +fn main() { + let mut buffer = String::new(); + io::stdin().read_line(&mut buffer).unwrap(); + let mut total = 0; + for range in buffer + .trim_end() + .split(',') + .map(|x| Range::new(x.split('-'))) + { + total += invalid(&range); + } + println!("Invalid: {}", total); +} -- cgit v1.2.3-70-g09d2