summaryrefslogtreecommitdiff
path: root/2022/day8/day8.c
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2022-12-11 14:47:27 +0100
committernekineki <nekineki@nekineki.net>2022-12-11 14:50:32 +0100
commitfe75c10e350743a1c078f065d69556fecf825ca5 (patch)
tree956556a564c9329346dc9d8b1535dc5e365f3d55 /2022/day8/day8.c
parenta74d2dc54aef546664bcc8c81eb8e01a93e94391 (diff)
move files around, update paths
Diffstat (limited to '2022/day8/day8.c')
-rw-r--r--2022/day8/day8.c155
1 files changed, 0 insertions, 155 deletions
diff --git a/2022/day8/day8.c b/2022/day8/day8.c
deleted file mode 100644
index f59322e..0000000
--- a/2022/day8/day8.c
+++ /dev/null
@@ -1,155 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include "../util.h"
-
-s32 reduce(s32 (*f)(s32 x, s32 y), s32 arr[], s32 len)
-{
- s32 ret = arr[0];
-
- for (s32 i = 1; i < len; ++i) {
- ret = f(ret, arr[i]);
- }
-
- return ret;
-}
-
-s32 mul(s32 x, s32 y)
-{
- return x * y;
-}
-
-s32 max(s32 x, s32 y)
-{
- return x > y ? x : y;
-}
-
-s32 count_char_in_string(char c, char *s)
-{
- s32 count = 0;
- do
- if (c == *s)
- count++;
- while (*s++);
- return count;
-}
-
-char *goto_char_in_string(char c, char *s)
-{
- do
- if (c == *s)
- return s;
- while (*s++);
- return NULL;
-}
-
-#define PP(arr, y,x) *(*(arr+y)+x)
-
-// char filename[] = "ref.txt";
-char filename[] = "pzl.txt";
-
-#define BUF_LEN 10000
-char file_buf[BUF_LEN];
-
-int main()
-{
- int fd = open(filename, O_RDONLY);
- s32 data_len = read(fd, file_buf, LEN(file_buf));
-
- if (data_len == -1) {
- printf("error opening file\n");
- exit(1);
- } else if (data_len == LEN(file_buf)) {
- printf("buffer probably not big enough\n");
- exit(1);
- }
- file_buf[data_len] = '\0';
-
- s32 y_len = count_char_in_string('\n', file_buf);
- s32 x_len;
- // printf("y_len: %d\n", y_len);
-
- s32 **arr = malloc(y_len * sizeof(s32*));
- s32 **flag = malloc(y_len * sizeof(s32*));
- char *start = file_buf;
- for (s32 i = 0; i < y_len; ++i) {
- char *end = goto_char_in_string('\n', start);
- x_len = end - start;
- // printf("x_len: %d\n", x_len);
-
- *(arr+i) = malloc(x_len * sizeof(s32*));
- *(flag+i) = malloc(x_len * sizeof(s32*));
-
- for (s32 j = 0; j < x_len; ++j) {
- *(*(arr+i) + j) = *(start + j) - '0';
- *(*(flag+i) + j) = 0;
- }
- start = end+1;
- }
-
-
- s32 res1 = 0;
- s32 maxval;
-
-#define RES1_CHECK() \
- if (PP(arr, y, x) > maxval) { \
- maxval = PP(arr, y, x); \
- if (PP(flag, y, x) == 0) { \
- PP(flag, y, x) = 1; \
- res1 += 1; \
- } \
- }
-
- for (s32 y = 0; y < y_len; ++y) {
- maxval = -1;
- for (s32 x = 0; x < x_len; ++x)
- RES1_CHECK();
- maxval = -1;
- for (s32 x = x_len-1; x >= 0 ; --x)
- RES1_CHECK();
- }
- for (s32 x = 0; x < x_len; ++x) {
- maxval = -1;
- for (s32 y = 0; y < y_len; ++y)
- RES1_CHECK();
- maxval = -1;
- for (s32 y = y_len-1; y >= 0 ; --y)
- RES1_CHECK();
- }
-
-
- s32 res2 = 0;
- for (s32 y = 0; y < y_len; ++y) {
- for (s32 x = 0; x < x_len; ++x) {
-
- s32 rldu[4] = {0};
- for (s32 r = x+1; r < x_len; ++r)
- if ((PP(arr,y,r) >= PP(arr,y,x)) || (r==(x_len-1))) {
- rldu[0] += r-x;
- break;
- }
- for (s32 l = x-1; l >= 0; --l)
- if ((PP(arr,y,l) >= PP(arr,y,x)) || (l==0)) {
- rldu[1] += x-l;
- break;
- }
- for (s32 d = y+1; d < y_len; ++d)
- if ((PP(arr,d,x) >= PP(arr,y,x)) || (d==(y_len-1))) {
- rldu[2] += d-y;
- break;
- }
- for (s32 u = y-1; u >= 0; --u)
- if ((PP(arr,u,x) >= PP(arr,y,x)) || (u==0)) {
- rldu[3] += y-u;
- break;
- }
- res2 = max(res2, reduce(mul, rldu, LEN(rldu)));
- }
- }
-
- printf("res1: %d\n", res1);
- printf("res2: %d\n", res2);
- // asm("int3");
-}
-