Skip to content
This repository was archived by the owner on Feb 14, 2020. It is now read-only.

Commit f6d1527

Browse files
committed
Solve day 4 part 1
1 parent 713eff6 commit f6d1527

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

2018/day04.c

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
5+
typedef unsigned uint;
6+
7+
enum { Len = 4096 };
8+
uint guards[Len][60];
9+
10+
int main() {
11+
uint id, sleep;
12+
while (!feof(stdin)) {
13+
uint year, month, day, hour, minute;
14+
char word[256];
15+
scanf(
16+
"[%u-%u-%u %u:%u] %255s #%u",
17+
&year, &month, &day, &hour, &minute, word, &id
18+
);
19+
scanf("%*[^\n]\n");
20+
21+
if (!strcmp(word, "falls")) sleep = minute;
22+
if (!strcmp(word, "wakes")) {
23+
for (uint m = sleep; m < minute; ++m) {
24+
guards[id][m]++;
25+
}
26+
}
27+
}
28+
uint maxID = 0, maxSum = 0;
29+
for (uint i = 0; i < Len; ++i) {
30+
uint sum = 0;
31+
for (uint m = 0; m < 60; ++m) {
32+
sum += guards[i][m];
33+
}
34+
if (sum < maxSum) continue;
35+
maxSum = sum;
36+
maxID = i;
37+
}
38+
uint maxMin = 0, maxSleep = 0;
39+
for (uint m = 0; m < 60; ++m) {
40+
if (guards[maxID][m] < maxSleep) continue;
41+
maxSleep = guards[maxID][m];
42+
maxMin = m;
43+
}
44+
printf("%u\n", maxID * maxMin);
45+
}

0 commit comments

Comments
 (0)