diff options
| author | matin <matin.kaufmann@gmail.com> | 2025-09-12 13:09:45 +0200 |
|---|---|---|
| committer | matin <matin.kaufmann@gmail.com> | 2025-09-12 13:09:45 +0200 |
| commit | 39654f7140ebfeafc2473ceb7e4739ed6d03fc1c (patch) | |
| tree | 0db56d48437ebceaf982ac6bfdc16f5f09cf3279 /date_calculator.py | |
| parent | 5d8131ca9cc982488da34c97022132532bf19868 (diff) | |
partieller rueckwechsel zu merge
Diffstat (limited to 'date_calculator.py')
| -rw-r--r-- | date_calculator.py | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/date_calculator.py b/date_calculator.py index befccfc..fe74827 100644 --- a/date_calculator.py +++ b/date_calculator.py @@ -34,6 +34,27 @@ class DateCalculator: return rounded_periods, total_months @staticmethod + def merge_periods(periods): + if not periods: + return [] + + periods.sort() + merged_periods = [] + + current_start, current_end, current_id = periods[0] + + for start, end, id in periods[1:]: + if start <= current_end + timedelta(days=1): + current_end = max(current_end, end) + else: + merged_periods.append((current_start, current_end, current_id)) + current_start, current_end, current_id = start, end, id + + merged_periods.append((current_start, current_end, current_id)) + + return merged_periods + + @staticmethod def adjust_periods(periods): """Adjust overlapping periods without merging. - Later periods overlapping with a previous one have their start moved to the previous end + 1 day. @@ -123,9 +144,9 @@ class DateCalculator: considered_full_projects = self.truncate_periods(full_projects, launch_date, prediction) considered_half_projects = self.truncate_periods(half_projects, launch_date, prediction) - considered_full_projects_merged = self.adjust_periods(considered_full_projects) + considered_full_projects_merged = self.merge_periods(considered_full_projects) considered_full_projects_rounded, months = self.round_periods(considered_full_projects_merged) - considered_full_projects_merged2 = self.adjust_periods(considered_full_projects_rounded) + considered_full_projects_merged2 = self.merge_periods(considered_full_projects_rounded) considered_full_projects_rounded2, months = self.round_periods(considered_full_projects_merged2) non_overlapping_half_projects = [] @@ -134,12 +155,12 @@ class DateCalculator: self.find_non_overlapping_periods(considered_full_projects_rounded2, test_interval) ) - considered_half_projects_merged = self.adjust_periods(non_overlapping_half_projects) + considered_half_projects_merged = self.merge_periods(non_overlapping_half_projects) considered_half_projects_rounded, months2 = self.round_periods(considered_half_projects_merged) - considered_half_projects_merged2 = self.adjust_periods(considered_half_projects_rounded) + considered_half_projects_merged2 = self.merge_periods(considered_half_projects_rounded) considered_half_projects_rounded2, months2 = self.round_periods(considered_half_projects_merged2) - all_projects_merged = self.adjust_periods( + all_projects_merged = self.merge_periods( considered_full_projects_rounded2 + considered_half_projects_rounded2 ) merged_event_periods = self.adjust_periods(considered_events) |
