diff options
Diffstat (limited to '2025/bb.rs')
| -rw-r--r-- | 2025/bb.rs | 164 |
1 files changed, 0 insertions, 164 deletions
diff --git a/2025/bb.rs b/2025/bb.rs deleted file mode 100644 index 84d6b31..0000000 --- a/2025/bb.rs +++ /dev/null @@ -1,164 +0,0 @@ -use aoc::{fetch::fetch, read::read}; - -struct Checker { - first: usize, - last: usize, -} - -impl Checker { - fn new(first: usize, last: usize) -> Result<Self, ()> { - 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::<usize>() - .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::<usize>() - // .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}"); -} |
