cleanup
[advent21.git] / 10a.c
1 #include <stdio.h>
2
3 char cmap[] = { [')']='(', [']']='[', ['}']='{', ['>']='<' };
4 int score[] = { [')']=3, [']']=57, ['}']=1197, ['>']=25137 };
5
6 int parse_line(char *buf)
7 {
8 char stack[100] = {0};
9 int sp = 0;
10 for (char *p = buf; *p != '\0'; p++) {
11 switch (*p) {
12 case '(':
13 case '[':
14 case '{':
15 case '<':
16 stack[sp++] = *p;
17 break;
18 case ')':
19 case ']':
20 case '}':
21 case '>':
22 //incomplete
23 if (sp == 0)
24 return 0;
25 //corrupted
26 if (stack[--sp] != cmap[(int)*p]) {
27 return score[(int)*p];
28 }
29 stack[sp] = '\0';
30 break;
31 case '\n':
32 break;
33 }
34 }
35 return 0;
36 }
37
38 int main()
39 {
40 char *buf = NULL;
41 size_t len = 0;
42 int r = 0;
43 while (getline(&buf, &len, stdin) != -1)
44 r += parse_line(buf);
45 printf("%d\n", r);
46 }