The problem
On this problem, you can be given a collection of instances at which an alarm goes off. Your job might be to find out the utmost time interval between alarms. Every alarm begins ringing in the beginning of the corresponding minute and rings for precisely one minute. The instances within the array are usually not in chronological order. Ignore duplicate instances, if any.
Examples:
# If the alarm goes off now, it is not going to go off for an additional 23 hours and 59 minutes.
remedy(["14:51"]) = "23:59"
# The max interval that the alarm is not going to go off is 11 hours and 40 minutes.
remedy(["23:00","04:22","18:05","06:24"]) == "11:40"
Within the second instance, the alarm goes off 4
 instances in a day.
The answer in Python code
Choice 1:
from datetime import datetime
def remedy(arr):
dts = [datetime(2000, 1, 1, *map(int, x.split(':'))) for x in sorted(arr)]
delta = max(int((b - a).total_seconds() - 60) for a, b in zip(dts, dts[1:] + [dts[0].exchange(day=2)]))
return '{:02}:{:02}'.format(*divmod(delta//60, 60))
Choice 2:
def remedy(arr):
arr = sorted(int(m[:2]) * 60 + int(m[3:]) for m in set(arr))
arr += [arr[0] + 1440]
h, m = divmod(max(arr[i + 1] - arr[i] - 1 for i in vary(len(arr) - 1)), 60)
return "{:02}:{:02}".format(h, m)
Choice 3:
def minutes(s):
return int(s[0:2]) * 60 + int(s[-2:])
def timeformat(m):
return "{:02d}:{:02d}".format(m // 60, m % 60)
def remedy(arr):
arr = listing(set(arr))
m = [minutes(arr) for arr in sorted(arr)]
distinction = [(m[(i+1)%len(m)] - a - 1) % (60*24) for i, a in enumerate(m)]
return(timeformat(max(distinction)))
Take a look at circumstances to validate our answer
check.it("Fundamental checks")
check.assert_equals(remedy(["14:51"]), "23:59")
check.assert_equals(remedy(["23:00","04:22","18:05","06:24"]),"11:40")
check.assert_equals(remedy(["21:14", "15:34", "14:51", "06:25", "15:30"]),"09:10")