Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Multiple Lightbulbs by _Chico_
# Taken from mission Lightbulb End Watching
from datetime import datetime
from itertools import zip_longest
from typing import List, Optional, Union, Tuple
def sum_light(els: List[Union[datetime, Tuple[datetime, int]]],
start_watching: Optional[datetime] = None,
end_watching: Optional[datetime] = None) -> int:
"""
how long the light bulb has been turned on
"""
def unify():
lamps_on = set()
for item in els:
try:
dt, lamp = item
except TypeError:
dt, lamp = item, 1
if not lamps_on or (lamps_on == {lamp}):
yield dt
lamps_on ^= {lamp}
els = list(unify())
return sum(((max(a, min(b, end_watching)) if end_watching else b)
- (min(b, max(a, start_watching)) if start_watching else a)).total_seconds()
for a, b in zip_longest(els[::2], els[1::2], fillvalue=datetime.max))
June 5, 2021