meetings

Category: Programming
Author: Marty Stepp
Book Chapter: 5.4
Problem: meetings
Write a static method named meetings that schedules meetings of varying random lengths, starting from a given time, until a point in time where a meeting ends within 5 minutes of an hour mark. Your method should accept two parameters representing the starting hour and starting minute. The method should repeatedly produce random meeting lengths between 15 and 30 minutes inclusive, printing what the time would be after that meeting is over.

You should stop when a meeting ends during the first or last 5 minutes of a given hour, that is, if the minutes hand of the clock is on 5 or less or 55 or higher. At least one meeting should always be scheduled regardless of the start time. The following table shows three example calls to your method and their resulting output. To simplify the output in cases with minutes < 10, we'll print times in a "2h 17m" format instead of the more familiar "2:17".

Call    | meetings(2, 17);             | meetings(10, 14);            | meetings(7, 3); 
Output  | 2h 17m start time            | 10h 14m start time           | 7h 3m start time
        | 2h 40m after 23-min meeting  | 10h 39m after 25-min meeting | 7h 18m after 15-min meeting
        | 3h 7m after 27-min meeting   | 10h 54m after 15-min meeting | 7h 38m after 20-min meeting
        | 3h 36m after 29-min meeting  | 11h 12m after 18-min meeting | 7h 57m after 19-min meeting
        | 3h 51m after 15-min meeting  | 11h 30m after 18-min meeting | 
        | 4h 9m after 18-min meeting   | 11h 47m after 17-min meeting | 
        | 4h 33m after 24-min meeting  | 12h 6m after 19-min meeting  | 
        | 5h 0m after 27-min meeting   | 12h 22m after 16-min meeting | 
        |                              | 12h 41m after 19-min meeting |
        |                              | 1h 9m after 28-min meeting   |
        |                              | 1h 35m after 26-min meeting  |
        |                              | 2h 5m after 30-min meeting   |

Note that a meeting can cause the current time to wrap into the next hour, and that the next hour after 12 is 1. Do not worry about AM vs. PM time for this problem. You may assume the parameter values passed will be legal values (starting hour between 1 and 12, starting minute between 0 and 59).