aboutsummaryrefslogtreecommitdiff
path: root/2023/15/15b.c
diff options
context:
space:
mode:
Diffstat (limited to '2023/15/15b.c')
-rw-r--r--2023/15/15b.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/2023/15/15b.c b/2023/15/15b.c
new file mode 100644
index 0000000..15b97f9
--- /dev/null
+++ b/2023/15/15b.c
@@ -0,0 +1,48 @@
1#include <inttypes.h>
2#include <stdio.h>
3
4#define N 100000
5
6char *b, line[N];
7int64_t c, l, s, n[256], box[256][N];
8
9int main() {
10 fgets(line, N, stdin);
11
12 for (b = line, c = 0; *b != '\n'; b++) {
13 switch (*b) {
14 case ',':
15 c = 0;
16 l = 0;
17 break;
18 case '=':
19 int64_t i;
20 for (i = 0; i < n[c]; i++)
21 if (box[c][i] / 10 == l)
22 break;
23 if (i == n[c]) n[c]++;
24 box[c][i] = l * 10 + (int)(*(++b)-'0');
25 break;
26 case '-':
27 for (int64_t i = 0; i < n[c]; i++) {
28 if (box[c][i] / 10 == l) {
29 for (int j = i+1; j < n[c]; j++)
30 box[c][j-1] = box[c][j];
31 n[c]--;
32 }
33 }
34 break;
35 default:
36 c = (c + (int)*b) * 17 % 256;
37 l = l*256 + (int)*b;
38 break;
39 }
40 }
41
42 for (int64_t i = 0; i < 256; i++)
43 for (int64_t j = 0; j < n[i]; j++)
44 s += (i+1) * (j+1) * (box[i][j]%10);
45
46 printf("%" PRId64 "\n", s);
47 return 0;
48}

Generated with cgit - Back to sebastiano.tronto.net