diff options
Diffstat (limited to 'advent-of-code/2022/08/1.c')
| -rw-r--r-- | advent-of-code/2022/08/1.c | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/advent-of-code/2022/08/1.c b/advent-of-code/2022/08/1.c deleted file mode 100644 index 6f69c97..0000000 --- a/advent-of-code/2022/08/1.c +++ /dev/null @@ -1,106 +0,0 @@ -#include <stdio.h> -#include <stdint.h> -#include <stdlib.h> -#include <string.h> - -typedef struct { - uint8_t *data; - int rows; - int columns; - int cap; -} Mat; - -int get(Mat *m, int row, int column) { - return m->data[row * m->columns + column]; -} - -void set(Mat *m, int row, int column, uint8_t value) { - m->data[row * m->columns + column] = value; -} - -char buf[4096]; - -int main() { - Mat m; - m.data = malloc(4096); - m.cap = 4096; - m.rows = 0; - m.columns = 0; - - - FILE *fp = fopen("input", "r"); - while(fgets(buf, 4096, fp)) { - int len = strlen(buf); - if (len <= 1) break; - if (m.columns == 0) m.columns = len - 1; - while (m.cap < (m.rows + 1) * m.columns) { - m.data = realloc(m.data, m.cap * 2); - m.cap *= 2; - } - memcpy(m.data + m.rows * m.columns, buf, m.columns); - m.rows++; - } - - Mat vis = m; - vis.data = malloc(m.rows * m.columns); - vis.cap = m.rows * m.columns; - memset(vis.data, 0, vis.cap); - - // top-down scan - for (int i = 0; i < m.columns; i++) { - int curmax = -1; - for (int j = 0; j < m.rows; j++) { - if (get(&m, j, i) > curmax) { - set(&vis, j, i, 1); - curmax = get(&m, j, i); - } - } - } - // down-top scan - for (int i = 0; i < m.columns; i++) { - int curmax = -1; - for (int j = m.rows - 1; j >= 0; j--) { - if (get(&m, j, i) > curmax) { - set(&vis, j, i, 1); - curmax = get(&m, j, i); - } - } - } - - // left-right scan - for (int i = 0; i < m.rows; i++) { - int curmax = -1; - for (int j = 0; j < m.columns; j++) { - if (get(&m, i, j) > curmax) { - set(&vis, i, j, 1); - curmax = get(&m, i, j); - } - } - } - - // right-left scan - for (int i = 0; i < m.rows; i++) { - int curmax = -1; - for (int j = m.columns - 1; j >= 0; j--) { - if (get(&m, i, j) > curmax) { - set(&vis, i, j, 1); - curmax = get(&m, i, j); - } - } - } - - // count - int count = 0; - for (int i = 0; i < m.columns; i++) { - int curmax = -1; - for (int j = 0; j < m.rows; j++) { - if (get(&vis, j, i) > 0) { - count++; - } - } - } - - printf("%d", count); - return 0; -} - |
