Posts

Showing posts from 2018

Optimizing date calculations

I wrote a naive little algorithm to calculate the end date of a scheduled event.
There are the following restraints:

Total number of hoursNumber of hours per dayWorkdays per weekSkip holidays
So, the pseudo-code looks like this:
While there are hours
    If it's a workday
         diminish the hour counter by the amount of hours per day
    Go to the next day
This works, but it's slow. Let's do this moar better!

New pseudo-code:
Hours / Hours per day                   ===> Days
Days / Workdays per week            ===> Weeks
(7 - workdays per week) * Weeks ===> More Days  Add the number of days to the initial date to get the end date.  Calculate the number of holidays in the range ===> Days  While there are days
    If it's a workday
         diminish the day counter by one
    Move the end date on day forward. This improved algorithm is 150 times faster than the original for 630 hours, 5 hours per day (or 126 days)