From d7ff9b456eac35226b6cf06f8c559c7d06eb178b Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Tue, 2 Dec 2025 17:36:33 +0800 Subject: new: day 2 --- 2025/bb.rs | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 2025/bb.rs (limited to '2025/bb.rs') diff --git a/2025/bb.rs b/2025/bb.rs new file mode 100644 index 0000000..84d6b31 --- /dev/null +++ b/2025/bb.rs @@ -0,0 +1,164 @@ +use aoc::{fetch::fetch, read::read}; + +struct Checker { + first: usize, + last: usize, +} + +impl Checker { + fn new(first: usize, last: usize) -> Result { + if first + .to_string() + .chars() + .next() + .unwrap() + == '0' + { + return Err(()); + } + + Ok( + Self { + first, + last, + }, + ) + } + + fn parse_section_naive(num: usize) -> usize { + let mut prevs = String::new(); + let mut ans = 0; + for c in num + .to_string() + .chars() + { + if prevs.is_empty() || prevs.contains(c) { + prevs.push(c); + } + if !prevs.contains(c) { + prevs.clear() + } + if prevs.len() >= 2 + && (num + .to_string() + .len() + == 2 + || !prevs.contains(c)) + { + ans += prevs + .parse::() + .unwrap(); + + prevs.clear(); + } + } + ans + } + + // fn parse_section(num: usize) -> usize { + // let mut ans = 0; + // for (i, c) in num + // .to_string() + // .chars() + // .enumerate() + // { + // for j in i..=num + // .to_string() + // .len() + // { + // for k in (j..=num + // .to_string() + // .len() + // / 2) + // .rev() + // { + // ans += if num.to_string()[j..=k] == num.to_string()[k..=k + + // (j..k).len()] { println!( + // "{} {j} {k}", + // num.to_string()[j..k].to_string() + // ); + // num.to_string()[j..=k] + // .parse::() + // .unwrap() + // } else { + // 0 + // } + // } + // } + // } + // ans + // } + + fn parse_section(num: usize) -> usize { + let s = num.to_string(); + let len = s.len(); + for substr_len in 1..=len / 2 { + if len % substr_len == 0 { + let first = &s[0..substr_len]; + if s.as_bytes() + .chunks(substr_len) + .all(|chunk| chunk == first.as_bytes()) + { + return num; + } + } + } + 0 + } + + fn parse(self) -> usize { + let mut ans = 0; + for i in self.first..=self.last { + ans += Self::parse_section(i); + } + ans + } +} + +pub fn main() { + let input = fetch( + 2, ',', + ); + // let input = read( + // "b", ',', + // ); + let mut ans = 0; + + println!( + "{}", + Checker::new(998, 1012,) + .unwrap() + .parse() + ); + println!( + "{}", + Checker::new(11, 22,) + .unwrap() + .parse() + ); + // return; + for s in input { + let s = s.replace( + '\n', "", + ); + let split = s.split('-'); + let first = split + .clone() + .next() + .unwrap() + .parse() + .unwrap(); + let last = split + .clone() + .nth(1) + .unwrap() + .parse() + .unwrap(); + ans += &Checker::new( + first, last, + ) + .unwrap() + .parse(); + } + println!("{ans}"); +} -- cgit v1.2.3