From 554ad47f09974f0131df285fda8ea50a1fdad8f5 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Mon, 11 Dec 2023 15:14:47 +0100 Subject: Initial commit, some solutions --- 2023/03/3a.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 2023/03/3a.c (limited to '2023/03/3a.c') 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 @@ +#include +#include +#include +#include + +#define N 1000 + +bool isnum(char c) { return c >= '0' && c <= '9'; } +bool issymbol(char c) { return c != '.' && c != 0 && c != '\n' && !isnum(c); } + +int grab(char *buf) { + int x; + + if (!isnum(*buf)) + return 0; + + while (isnum(*buf)) buf--; + buf++; + x = atoi(buf); + while (isnum(*buf)) *buf++ = '.'; + + return x; +} + +int main() { + char line[N], prev[N]; + bool l, c, r, ul, uc, ur; + int i, sum; + + sum = 0; + memset(line, '.', N); + memset(prev, '.', N); + while (fgets(&line[1], N-1, stdin) != NULL) { + for (i = 1; line[i]; i++) { + l = issymbol(line[i-1]); + c = issymbol(line[i]); + r = issymbol(line[i+1]); + ul = issymbol(prev[i-1]); + uc = issymbol(prev[i]); + ur = issymbol(prev[i+1]); + if (l || r || ul || uc || ur) + sum += grab(&line[i]); + if (l || c || r) + sum += grab(&prev[i]); + } + memcpy(prev, line, N); + } + + printf("%d\n", sum); + return 0; +} -- cgit v1.3