From 1fc4099c46f7518f0f35a7858f76282da749c845 Mon Sep 17 00:00:00 2001 From: Penguin Date: Mon, 6 Dec 2021 16:12:44 -0600 Subject: [PATCH] day 4 part 1 almost done.. didnt know diagonals didnt count -_- --- day4/c/Makefile | 9 ++ day4/c/aoc_day4 | Bin 0 -> 25920 bytes day4/c/aoc_day4.c | 244 ++++++++++++++++++++++++++++++++++++++++++++++ day4/c/aoc_day4.o | Bin 0 -> 18536 bytes 4 files changed, 253 insertions(+) create mode 100644 day4/c/Makefile create mode 100755 day4/c/aoc_day4 create mode 100644 day4/c/aoc_day4.c create mode 100644 day4/c/aoc_day4.o diff --git a/day4/c/Makefile b/day4/c/Makefile new file mode 100644 index 0000000..e6b463b --- /dev/null +++ b/day4/c/Makefile @@ -0,0 +1,9 @@ +CC=gcc +CFLAGS=-std=gnu99 -O2 -g -Wall -Wextra -Wshadow +PROJECT=aoc_day4 + +%.o: %.c + $(CC) -c -o $@ $< $(CFLAGS) + +$(PROJECT): aoc_day4.o + $(CC) -o aoc_day4 aoc_day4.o diff --git a/day4/c/aoc_day4 b/day4/c/aoc_day4 new file mode 100755 index 0000000000000000000000000000000000000000..b290d1142132d5aee513fcf9f2dab108119cdd9b GIT binary patch literal 25920 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 +#include +#include +#include +#include +#include +#include + +#define RESET "\033[0m" +#define RED "\033[31m" + +#define DEBUG +#define INPUT_FILE ("../input_test.txt") +#define MAX_NUMBERS_DRAWN (1024) +#define MAX_BOARDS (256) +/* + Think of the win_conditions array as this table of win conditions + WIN CONDITIONS + * x x x x x * x x x x x * x x x x x * x x x x x * + * x x x x x * x x x x x * x x x x x * x x x x x * + * x x x x x * x x x x x * x x x x x * x x x x x * + * x x x x x * x x x x x * x x x x x * x x x x x * + * x x x x x * x x x x x * x x x x x * x x x x x * + + * * * * * x x x x x x x x x x x x x x x x x x x x + x x x x x * * * * * x x x x x x x x x x x x x x x + x x x x x x x x x x * * * * * x x x x x x x x x x + x x x x x x x x x x x x x x x * * * * * x x x x x + x x x x x x x x x x x x x x x x x x x x * * * * * + + * x x x x x x x x * + x * x x x x x x * x + x x * x x x x * x x + x x x * x x * x x x + x x x x * * x x x x + */ + + +const uint32_t win_conditions[12] = + { + 0b00000000000100001000010000100001, + 0b00000000001000010000100001000010, + 0b00000000010000100001000010000100, + 0b00000000100001000010000100001000, + 0b00000001000010000100001000010000, + 0b00000000000000000000000000011111, + 0b00000000000000000000001111100000, + 0b00000000000000000111110000000000, + 0b00000000000011111000000000000000, + 0b00000001111100000000000000000000, + 0b00000001000001000001000001000001, + 0b00000000000100010001000100010000, + }; + + +typedef struct board_t +{ + uint8_t matrix[5][5]; + // idk what to call this + // its just a u32, if the number in a slot x has been drawn, + // then a 1 will be in that bit position inside of this number + // example: slot[3][4] = (3 * 5) + 4 = 19, if this slot has been drawn, + // bit position 19 will be a 1 + uint32_t output; + uint8_t most_recently_drawn; +}board_t; + +bool bingo_board_win_check(const board_t* board); +int bingo_board_compute_answer(const board_t* board); +bool bingo_add_new_entry(board_t* board, uint8_t num); +void print_bingo_board(const board_t* board); + +int main(void) +{ + int p1_answer = 0; + board_t bingo_bank[MAX_BOARDS]; + uint16_t bingo_board_count = 0; + + uint8_t bingo_drawn_numbers[MAX_NUMBERS_DRAWN]; + uint16_t bingo_drawn_numbers_ct = 0; + + memset(bingo_bank, 0, sizeof(board_t) * MAX_BOARDS); + + + FILE* fp = fopen(INPUT_FILE, "r"); + if(fp == NULL) + { + printf("Failed to open input file for reading...\n"); + exit(-1); + } + + size_t len; + ssize_t rc; + char* line = NULL; + rc = getline(&line, &len, fp); + const char* delim = ", \r\n"; + char* tok = strtok(line, delim); + while(tok != NULL) + { + bingo_drawn_numbers[bingo_drawn_numbers_ct++] = + strtoul(tok, NULL, 10); + tok = strtok(NULL, delim); + } + + while(bingo_board_count < MAX_BOARDS && fp != NULL) + { + // continue to numbers.... + char c = '\0'; + while(!isdigit(c) && !feof(fp)) + { + c = fgetc(fp); + } + if(feof(fp)) + { + break; + } + fseek(fp, -1, SEEK_CUR); + for(int ind = 0; ind < 5; ind++) + { + rc = getline(&line, &len, fp); + if(rc < 0) + { + printf("some error while parsing"); + exit(-1); + } + printf("Reading in this line: %s", line); + sscanf(line, + "%2" SCNu8 " " + "%2" SCNu8 " " + "%2" SCNu8 " " + "%2" SCNu8 " " + "%2" SCNu8 " ", + &bingo_bank[bingo_board_count].matrix[ind][0], + &bingo_bank[bingo_board_count].matrix[ind][1], + &bingo_bank[bingo_board_count].matrix[ind][2], + &bingo_bank[bingo_board_count].matrix[ind][3], + &bingo_bank[bingo_board_count].matrix[ind][4]); + } + printf("done reading lines\n\n"); + bingo_board_count++; + } + + #ifdef DEBUG + for(int ind = 0; ind < bingo_board_count; ind++) + { + print_bingo_board(&bingo_bank[ind]); + } + #endif + + for(int ind = 0; ind < bingo_drawn_numbers_ct; ind++) + { + printf("... drawing number ... Number #%d!\n", bingo_drawn_numbers[ind]); + for(int board = 0; board < bingo_board_count; board++) + { + if(bingo_add_new_entry(&bingo_bank[board], bingo_drawn_numbers[ind])) + { + p1_answer = bingo_board_compute_answer(&bingo_bank[board]); + #ifdef DEBUG + print_bingo_board(&bingo_bank[board]); + #endif + break; + } + #ifdef DEBUG + print_bingo_board(&bingo_bank[board]); + #endif + } + if(p1_answer != 0) + { + break; + } + } + + printf("Answer for part 1: %d\n", p1_answer); + return 0; +} + +// returns +bool bingo_add_new_entry(board_t* board, uint8_t num) +{ + for(int ind = 0; ind < 5; ind++) + { + for(int jind = 0; jind < 5; jind++) + { + if(board->matrix[ind][jind] == num) + { + board->output |= (1 << (ind * 5 + jind)); + board->most_recently_drawn = num; + return bingo_board_win_check(board); + } + } + } + return false; +} + + +bool bingo_board_win_check(const board_t* board) +{ + for(int wc = 0; wc < 12; wc++) + { + // found a winner check + if((board->output & win_conditions[wc]) == win_conditions[wc]) + { + return true; + } + } + return false; +} + +int bingo_board_compute_answer(const board_t* board) +{ + int result = 0; + for(int ind = 0; ind < 5; ind++) + { + for(int jind = 0; jind < 5; jind++) + { + if(!(board->output & (1 << ((ind * 5) + jind)))) + { + result += board->matrix[ind][jind]; + } + } + } + result *= board->most_recently_drawn; + return result; +} + +void print_bingo_board(const board_t* board) +{ + printf("\n"); + for(int ind = 0; ind < 5; ind++) + { + for(int jind = 0; jind < 5; jind++) + { + if(board->output & (1 << ((ind * 5) + jind))) + { + printf(RED "%2d " RESET, board->matrix[ind][jind]); + } + else + { + printf("%2d ", board->matrix[ind][jind]); + } + } + printf("\r\n"); + } +} diff --git a/day4/c/aoc_day4.o b/day4/c/aoc_day4.o new file mode 100644 index 0000000000000000000000000000000000000000..29930e8c0342cfc170710327e62c8e103b6df243 GIT binary patch literal 18536 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 Qd?NB6e?NkY5Y0jT4~ON3BLDyZ literal 0 HcmV?d00001