diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-12-03 22:51:44 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-12-04 09:08:47 +0800 |
| commit | 4250e02b0f08e3389fdef0500de08ab74ffa2611 (patch) | |
| tree | 063b75d1c0eca72bf7419b304df1735e8e6a11bc /2025/ba.rs | |
| parent | c8780d06a13dd08bccc1ce29e0b7cd60ff65f259 (diff) | |
refactor: structure of each day
Diffstat (limited to '2025/ba.rs')
| -rw-r--r-- | 2025/ba.rs | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/2025/ba.rs b/2025/ba.rs deleted file mode 100644 index 4903ec0..0000000 --- a/2025/ba.rs +++ /dev/null @@ -1,162 +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(); - if s.len() % 2 != 0 { - return 0; - } - if s[0..s.len() / 2] == s[s.len() / 2..s.len()] { - 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}"); -} |
