Op 14 maart viert men wereldwijd $$\pi$$-dag, omdat in de Amerikaanse schrijfwijze voor datums 14 maart geschreven wordt als 3/14 en de driecijferige benadering voor $$\pi$$ gelijk is aan 3,14. De viering begint gewoonlijk om 13:59 uur (1:59 PM), omdat de zescijferige benadering van $$\pi$$ gelijk is aan 3,14159. Mensen die de 24-uurs klokindeling gebruiken, handhaven een ander begin: 15:09.

pi pie
Pi pie ofwel Pi-taart, gebakken aan de Technische Universiteit Delft in 2008.

Op scholen en universiteiten in Amerika begon men een aantal jaar geleden de $$\pi$$-dag te vieren met het eten van taart (in het Engels pie, ook de Griekse letter pi wordt door Engelstaligen zo uitgesproken) of pizza, of er worden etenswaren gemaakt in de vorm van een $$\pi$$-teken.

Opgave

In landen waar men datums aanduidt onder de vorm dag/maand, zou $$\pi$$-dag moeten vallen op 31 april. Helaas telt de maand april maar 30 dagen. We hebben daarom een nieuwe kalender bedacht waarin het toegelaten is om de dagen gewoon verder te tellen op het einde van de maand. In dit systeem is 31 april dan gewoon een synoniem voor 1 mei.

Gevraagd wordt om een functie koproldatum te schrijven met drie optionele parameters: dag, maand en jaar. Aan deze parameters kunnen gehele getallen (int) doorgegeven worden, die respectievelijk staan voor de dag, de maand en het jaar in ons nieuw kalendersysteem dat toelaat om de dagen op het einde van de maand gewoon verder te tellen. De standaardwaarden voor deze parameters zijn respectievelijk de huidige dag, de huidige maand en het huidige jaar. De functie moet de datum teruggeven (datetime.date) die in de reguliere kalender correspondeert met de opgegeven datum.

Op die manier leest koproldatum(43, 15, 2016) als de drieënveertigste dag van de vijftiende maand van het jaar 2016. Voor de omrekening rollen we eerst de maanden door naar het volgende jaar, zodat we uitkomen bij maart, de derde maand van het jaar 2017. Aangezien de maand maart 31 dagen telt, rollen we de extra dagen om naar april, zodat we uiteindelijk uitkomen bij 12 april 2017 (12/4/2017). Datums die ook geldig zijn in de reguliere kalender, blijven daarbij uiteraard ongewijzigd. Verder moet bij het doorrollen ook rekening gehouden worden met schrikkeljaren.

Voorbeeld

>>> koproldatum(31, 4)
datetime.date(2024, 5, 1)
>>> koproldatum(43, 15, 2016)
datetime.date(2017, 4, 12)
>>> koproldatum(jaar=2016, maand=3, dag=16)
datetime.date(2016, 3, 16)
>>> koproldatum(jaar=2016, dag=64, maand=12)
datetime.date(2017, 2, 2)
>>> koproldatum(maand=19, jaar=2016, dag=99)
datetime.date(2017, 10, 7)
>>> koproldatum(jaar=2016, dag=99999, maand=1)
datetime.date(2289, 10, 14)
>>> koproldatum(jaar=2016, maand=9999, dag=10)
datetime.date(2849, 3, 10)