aboutsummaryrefslogtreecommitdiff
path: root/2023/03/3a.c
diff options
context:
space:
mode:
Diffstat (limited to '2023/03/3a.c')
-rw-r--r--2023/03/3a.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/2023/03/3a.c b/2023/03/3a.c
new file mode 100644
index 0000000..13c8c8d
--- /dev/null
+++ b/2023/03/3a.c
@@ -0,0 +1,51 @@
1#include <stdbool.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6#define N 1000
7
8bool isnum(char c) { return c >= '0' && c <= '9'; }
9bool issymbol(char c) { return c != '.' && c != 0 && c != '\n' && !isnum(c); }
10
11int grab(char *buf) {
12 int x;
13
14 if (!isnum(*buf))
15 return 0;
16
17 while (isnum(*buf)) buf--;
18 buf++;
19 x = atoi(buf);
20 while (isnum(*buf)) *buf++ = '.';
21
22 return x;
23}
24
25int main() {
26 char line[N], prev[N];
27 bool l, c, r, ul, uc, ur;
28 int i, sum;
29
30 sum = 0;
31 memset(line, '.', N);
32 memset(prev, '.', N);
33 while (fgets(&line[1], N-1, stdin) != NULL) {
34 for (i = 1; line[i]; i++) {
35 l = issymbol(line[i-1]);
36 c = issymbol(line[i]);
37 r = issymbol(line[i+1]);
38 ul = issymbol(prev[i-1]);
39 uc = issymbol(prev[i]);
40 ur = issymbol(prev[i+1]);
41 if (l || r || ul || uc || ur)
42 sum += grab(&line[i]);
43 if (l || c || r)
44 sum += grab(&prev[i]);
45 }
46 memcpy(prev, line, N);
47 }
48
49 printf("%d\n", sum);
50 return 0;
51}

Generated with cgit - Back to sebastiano.tronto.net