Browse Source

Nim day 4

master
Chris Smith 5 years ago
parent
commit
22fc1d269a
1 changed files with 44 additions and 0 deletions
  1. 44
    0
      day04.nim

+ 44
- 0
day04.nim View File

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