extern crate alloc;
use alloc::collections::BTreeSet;
use alloc::vec::Vec;
pub(super) fn maximal_runs(above: &BTreeSet<u64>) -> Vec<(u64, u64)> {
let mut runs: Vec<(u64, u64)> = Vec::new();
for &dot in above {
match runs.last_mut() {
Some((start, len)) if start.checked_add(*len) == Some(dot) => *len += 1,
_ => runs.push((dot, 1)),
}
}
runs
}
pub(super) fn maximal_run_count(above: &BTreeSet<u64>) -> usize {
let mut previous = None;
let mut count = 0usize;
for &dot in above {
if previous.and_then(|last: u64| last.checked_add(1)) != Some(dot) {
count = count.saturating_add(1);
}
previous = Some(dot);
}
count
}