Refactor range combining logic for future reusability
This commit is contained in:
parent
79541d0dae
commit
fd417a6e97
|
|
@ -104,15 +104,27 @@ public class Day05 : IPuzzleSolver<long>
|
||||||
{
|
{
|
||||||
optimizedRanges.Add(range);
|
optimizedRanges.Add(range);
|
||||||
}
|
}
|
||||||
else if (IsIdInRange(range.from, lastRange) && ! IsIdInRange(range.to, lastRange))
|
else if (TryCombineRanges(lastRange, range, out var combined))
|
||||||
{
|
{
|
||||||
optimizedRanges[^1] = (lastRange.from, range.to);
|
optimizedRanges[^1] = combined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return optimizedRanges;
|
return optimizedRanges;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool TryCombineRanges(Range first, Range second, out Range combined)
|
||||||
|
{
|
||||||
|
if (IsIdInRange(second.from, first) && !IsIdInRange(second.to, first))
|
||||||
|
{
|
||||||
|
combined = (first.from, second.to);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
combined = first;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static IEnumerable<long> CountIdsInRanges(IEnumerable<Range> combinedRanges)
|
private static IEnumerable<long> CountIdsInRanges(IEnumerable<Range> combinedRanges)
|
||||||
{
|
{
|
||||||
var countIdsInRanges = combinedRanges.Select(range => range.to - range.from + 1);
|
var countIdsInRanges = combinedRanges.Select(range => range.to - range.from + 1);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue