Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Second (='ω'=) < match, case solution in Clear category for Broken Clock by Magu
from datetime import datetime, timedelta
def broken_clock(starting_time, wrong_time, error_description):
m, n = 0, 0; e = error_description.split(' ')
st = datetime.strptime(starting_time, '%H:%M:%S')
wt = datetime.strptime(wrong_time, '%H:%M:%S')
match (e[1][:4]):
case ('seco'): n = eval(e[0])
case ('minu'): n = eval(e[0]) * 60
case ('hour'): n = eval(e[0]) * 60 * 60
match (e[4][:4]):
case ('seco'): m = eval(e[3])
case ('minu'): m = eval(e[3]) * 60
case ('hour'): m = eval(e[3]) * 60 * 60
st += timedelta(seconds = int(m / (m + n) * (wt - st).total_seconds()))
return st.strftime('%H:%M:%S')
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == "__main__":
assert broken_clock('00:00:00', '00:00:15', '+5 seconds at 10 seconds') == '00:00:10', "First example"
assert broken_clock('06:10:00', '06:10:15', '-5 seconds at 10 seconds') == '06:10:30', 'Second example'
assert broken_clock('13:00:00', '14:01:00', '+1 second at 1 minute') == '14:00:00', 'Third example'
assert broken_clock('01:05:05', '04:05:05', '-1 hour at 2 hours') == '07:05:05', 'Fourth example'
assert broken_clock('00:00:00', '00:00:30', '+2 seconds at 6 seconds') == '00:00:22', 'Fifth example'
Nov. 2, 2021