{
let curr = null
const acts = inp4.map(parse4).sort((a, b) => moment.duration(a.date - b.date).asMinutes())
const n_days = acts.map(a => a.id).filter((e) => e).length
const A = range(n_days, () => range(60, () => false))
const ids = uniq(acts.map(a => a.id).filter((e) => e))
const guards = ids.reduce((acc, id) => (acc[id] = [], acc), {})
let last = null
const fill = (day, start, end, id) => {
for (let i = start; i < end; i++) A[day][i] = id
}
let day = -1
let guard = null
acts.forEach(a => {
if (a.id) {
day += 1
guard = a.id
}
if (a.sleeping) {
last = a.date.minutes()
}
if (a.waking) {
fill(day, last, a.date.minutes(), guard)
}
})
const time_slept_by_id = (id) => A.reduce((s, day) => s + day.filter(id1 => id == id1).length, 0)
const time_slept_by_min = (id) => (min) => A.filter(day => day[min] == id).length
const f = time_slept_by_id
const sleepiest = ids.sort((a, b) => f(b) - f(a))[0]
const g = time_slept_by_min(sleepiest)
const sleepy_time = range(60).sort((a, b) => g(b) - g(a))[0]
mutable A4 = A
mutable ids4 = ids
return parseInt(sleepiest) * sleepy_time
}