···
let mut seen_ranges: HashSet<(u64, u64)> =
HashSet::with_capacity(fresh_ranges.len());
fresh_ranges.iter().for_each(|range| {
31
-
let range: (u64, u64) = seen_ranges.clone().iter().fold(
31
+
let range = seen_ranges.clone().iter().try_fold(
|range: (u64, u64), seen_range: &(u64, u64)| {
// btw im refusing to ever do something better than this idc about your sorting and whatever this is the way shut the fuck up i spent three hours on this i will be using it
···
range.1.cmp(&seen_range.0),
// if there's no touching
42
-
(Gt, Gt, Gt, Gt) | (Lt, Lt, Lt, Lt) => range,
42
+
(Gt, Gt, Gt, Gt) | (Lt, Lt, Lt, Lt) => Some(range),
// if it's inside of the other one
47
-
| (Eq, Eq, _, _) => (0_u64, 0_u64),
47
+
| (Eq, Eq, _, _) => None,
// if the other one is inside it
(Lt, Gt, _, _) | (Eq, Gt, _, _) | (Lt, Eq, _, _) => {
seen_ranges.remove(seen_range);
// if it's touching on the left side make them touch
seen_ranges.remove(seen_range);
56
-
(range.0, seen_range.1)
56
+
Some((range.0, seen_range.1))
// if it's touching on the right size make them touch
seen_ranges.remove(seen_range);
61
-
(seen_range.0, range.1)
61
+
Some((seen_range.0, range.1))
67
-
if range != (0_u64, 0_u64) {
68
-
seen_ranges.insert(range);
67
+
if range.is_some() {
68
+
seen_ranges.insert(range.unwrap());