diff options
| author | David Ferrone <zapwai@gmail.com> | 2024-03-04 11:33:02 -0500 |
|---|---|---|
| committer | David Ferrone <zapwai@gmail.com> | 2024-03-04 11:33:02 -0500 |
| commit | 29dfd30903b2aa7ed1fa7d90d52425841e0ddaa0 (patch) | |
| tree | f99efe1fd15d52cf1823cef6af58ac58f9775188 /challenge-259/zapwai/python/ch-1.py | |
| parent | 317868d8b68301864db17e9dac3f9b15ffa8b448 (diff) | |
| download | perlweeklychallenge-club-29dfd30903b2aa7ed1fa7d90d52425841e0ddaa0.tar.gz perlweeklychallenge-club-29dfd30903b2aa7ed1fa7d90d52425841e0ddaa0.tar.bz2 perlweeklychallenge-club-29dfd30903b2aa7ed1fa7d90d52425841e0ddaa0.zip | |
Week 259
Diffstat (limited to 'challenge-259/zapwai/python/ch-1.py')
| -rw-r--r-- | challenge-259/zapwai/python/ch-1.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/challenge-259/zapwai/python/ch-1.py b/challenge-259/zapwai/python/ch-1.py new file mode 100644 index 0000000000..502f126cbb --- /dev/null +++ b/challenge-259/zapwai/python/ch-1.py @@ -0,0 +1,72 @@ +base_year = 2000 +days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] + +def is_leap_year(year): + if year % 400 == 0: + return True + if year % 100 == 0: + return False + if year % 4 == 0: + return True + return False + +def weekday(year, month, day): + year = int(year); month = int(month); day = int(day) + skip_days = year - base_year + for yr in range(base_year, year): + if is_leap_year(yr): + skip_days += 1 + if is_leap_year(year) and month > 2: + skip_days += 1 + for m in range(1, 13): + if m < month: + skip_days += days_in_month[m - 1] + skip_days += int(day) - 1 + days = ["sat", "sun", "mon", "tue", "wed", "thu", "fri"] + return days[skip_days % 7] + +def is_weekend(year, month, day): + today = weekday(year, month, day) + if today == "sat" or today == "sun": + return True + else: + return False + +def is_holiday(bank_holidays, year, month, day): + for date in bank_holidays: + (hol_year, hol_month, hol_day) = date.split("-") + if year == hol_year and month == hol_month and day == hol_day: + return True + return False + +def proc(start_date, offset, bank_holidays): + (year, month, day) = start_date.split("-") + (new_year, new_month, new_day) = (year, month, day) + steps = offset + while steps > 0: + leap = 0 + if is_leap_year(int(year)) and month == "02": + leap = 1 + if int(new_day) + 1 > leap + days_in_month[int(new_month)-1]: + if new_month == "12": + new_year = str(int(new_year) + 1) + new_month = '{:02}'.format(int(new_month) + 1) + if new_month == "13": + new_month = "01" + new_day = "01" + else: + new_day = '{:02}'.format(int(new_day) + 1) + if not (is_holiday(bank_holidays, new_year, new_month, new_day) or is_weekend(new_year, new_month, new_day)): + steps -= 1 + new_date = new_year + "-" + new_month + "-" + new_day + print("Input:", start_date, "Offset:", offset, "Holidays: ", end='') + for d in bank_holidays: + print(d,'', end='') + print("\nOutput:", new_date) + +start_date = '2018-06-28' +offset = 3 +bank_holidays = ["2018-07-03"] + +proc(start_date, offset, bank_holidays) + |
