My solutions to 2018's advent of code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

day04.nim 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import algorithm, math, sequtils, strutils, tables
  2. var
  3. guard, sleep: int
  4. sleeps = initTable[int, array[60, int]](64)
  5. for line in readFile("data/04.txt").strip.splitlines.sorted(system.cmp[string]):
  6. var action = line[line.len-5..line.len-1]
  7. case action
  8. of "shift":
  9. guard = line[26..line.len-14].parseInt
  10. if not sleeps.haskey(guard):
  11. var sleepRecord: array[60, int]
  12. sleeps[guard] = sleepRecord
  13. of "sleep":
  14. sleep = line[15..16].parseInt
  15. else:
  16. for m in sleep..line[15..16].parseInt - 1:
  17. sleeps[guard][m].inc
  18. var
  19. mostSleepyGuard = -1
  20. mostSleepyGuardSleepiestMinute = -1
  21. mostSleepyGuardCount = -1
  22. mostSleepyMinute = -1
  23. mostSleepyMinuteCount = -1
  24. mostSleepyMinuteGuard = -1
  25. for pair in sleeps.pairs:
  26. var sleepiest = pair[1].max
  27. if sleepiest > mostSleepyMinuteCount:
  28. mostSleepyMinuteCount = sleepiest
  29. mostSleepyMinute = pair[1].find(sleepiest)
  30. mostSleepyMinuteGuard = pair[0]
  31. var sleepCount = pair[1].sum
  32. if sleepCount > mostSleepyGuardCount:
  33. mostSleepyGuardCount = sleepCount
  34. mostSleepyGuardSleepiestMinute = pair[1].find(sleepiest)
  35. mostSleepyGuard = pair[0]
  36. echo mostSleepyGuard * mostSleepyGuardSleepiestMinute
  37. echo mostSleepyMinuteGuard * mostSleepyMinute