1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import algorithm, math, sequtils, strutils, tables
-
- var
- guard, sleep: int
- sleeps = initTable[int, array[60, int]](64)
-
- for line in readFile("data/04.txt").strip.splitlines.sorted(system.cmp[string]):
- var action = line[line.len-5..line.len-1]
- case action
- of "shift":
- guard = line[26..line.len-14].parseInt
- if not sleeps.haskey(guard):
- var sleepRecord: array[60, int]
- sleeps[guard] = sleepRecord
- of "sleep":
- sleep = line[15..16].parseInt
- else:
- for m in sleep..line[15..16].parseInt - 1:
- sleeps[guard][m].inc
-
- var
- mostSleepyGuard = -1
- mostSleepyGuardSleepiestMinute = -1
- mostSleepyGuardCount = -1
-
- mostSleepyMinute = -1
- mostSleepyMinuteCount = -1
- mostSleepyMinuteGuard = -1
-
- for pair in sleeps.pairs:
- var sleepiest = pair[1].max
- if sleepiest > mostSleepyMinuteCount:
- mostSleepyMinuteCount = sleepiest
- mostSleepyMinute = pair[1].find(sleepiest)
- mostSleepyMinuteGuard = pair[0]
-
- var sleepCount = pair[1].sum
- if sleepCount > mostSleepyGuardCount:
- mostSleepyGuardCount = sleepCount
- mostSleepyGuardSleepiestMinute = pair[1].find(sleepiest)
- mostSleepyGuard = pair[0]
-
- echo mostSleepyGuard * mostSleepyGuardSleepiestMinute
- echo mostSleepyMinuteGuard * mostSleepyMinute
|