aboutsummaryrefslogtreecommitdiff
path: root/docs/exercises/solutions/mlk-day-rrule.rst
blob: b8da806b4cd3b69ac14283114fb4016795e6e4ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
:orphan:

Martin Luther King Day: Solution
================================

Presented here is a solution to the :ref:`Martin Luther King Day exercises <mlk-day-exercise>`.


.. code-block:: python3

    # ------- YOUR CODE -------------#
    from dateutil import rrule
    from datetime import datetime

    MLK_DAY = rrule.rrule(
        dtstart=datetime(1986, 1, 20),      # First celebration
        freq=rrule.YEARLY,                  # Occurs once per year
        bymonth=1,                          # In January
        byweekday=rrule.MO(+3),             # On the 3rd Monday
    )

    # -------------------------------#

    from datetime import datetime
    MLK_TEST_CASES = [
        ((datetime(1970, 1, 1), datetime(1980, 1, 1)),
         []),
        ((datetime(1980, 1, 1), datetime(1989, 1, 1)),
         [datetime(1986, 1, 20),
          datetime(1987, 1, 19),
          datetime(1988, 1, 18)]),
        ((datetime(2017, 2, 1), datetime(2022, 2, 1)),
         [datetime(2018, 1, 15, 0, 0),
          datetime(2019, 1, 21, 0, 0),
          datetime(2020, 1, 20, 0, 0),
          datetime(2021, 1, 18, 0, 0),
          datetime(2022, 1, 17, 0, 0)]
         ),
    ]

    def test_mlk_day():
        for (between_args, expected) in MLK_TEST_CASES:
            assert MLK_DAY.between(*between_args) == expected

    if __name__ == "__main__":
        test_mlk_day()
        print('Success!')