diff --git a/day4/c/aoc_day4 b/day4/c/aoc_day4 index b290d11..2b7d4be 100755 Binary files a/day4/c/aoc_day4 and b/day4/c/aoc_day4 differ diff --git a/day4/c/aoc_day4.c b/day4/c/aoc_day4.c index 5f6804d..61e9696 100644 --- a/day4/c/aoc_day4.c +++ b/day4/c/aoc_day4.c @@ -10,7 +10,7 @@ #define RED "\033[31m" #define DEBUG -#define INPUT_FILE ("../input_test.txt") +#define INPUT_FILE ("../input.txt") #define MAX_NUMBERS_DRAWN (1024) #define MAX_BOARDS (256) /* @@ -27,16 +27,10 @@ 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] = +const uint32_t win_conditions[10] = { 0b00000000000100001000010000100001, 0b00000000001000010000100001000010, @@ -47,9 +41,7 @@ const uint32_t win_conditions[12] = 0b00000000000000000000001111100000, 0b00000000000000000111110000000000, 0b00000000000011111000000000000000, - 0b00000001111100000000000000000000, - 0b00000001000001000001000001000001, - 0b00000000000100010001000100010000, + 0b00000001111100000000000000000000 }; @@ -63,6 +55,8 @@ typedef struct board_t // bit position 19 will be a 1 uint32_t output; uint8_t most_recently_drawn; + // if true, its got a bingo + bool bingo_status; }board_t; bool bingo_board_win_check(const board_t* board); @@ -73,6 +67,7 @@ void print_bingo_board(const board_t* board); int main(void) { int p1_answer = 0; + int p2_answer = 0; board_t bingo_bank[MAX_BOARDS]; uint16_t bingo_board_count = 0; @@ -123,7 +118,6 @@ int main(void) printf("some error while parsing"); exit(-1); } - printf("Reading in this line: %s", line); sscanf(line, "%2" SCNu8 " " "%2" SCNu8 " " @@ -136,20 +130,21 @@ int main(void) &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 +#ifdef DEBUG for(int ind = 0; ind < bingo_board_count; ind++) { print_bingo_board(&bingo_bank[ind]); } - #endif +#endif for(int ind = 0; ind < bingo_drawn_numbers_ct; ind++) { +#ifdef DEBUG printf("... drawing number ... Number #%d!\n", bingo_drawn_numbers[ind]); +#endif for(int board = 0; board < bingo_board_count; board++) { if(bingo_add_new_entry(&bingo_bank[board], bingo_drawn_numbers[ind])) @@ -160,9 +155,9 @@ int main(void) #endif break; } - #ifdef DEBUG +#ifdef DEBUG print_bingo_board(&bingo_bank[board]); - #endif +#endif } if(p1_answer != 0) { @@ -171,6 +166,49 @@ int main(void) } printf("Answer for part 1: %d\n", p1_answer); + printf("Part 2... Begin!\n"); + + // to do part 2, we're going to completely restart + // we could just keep going off of the above for loop to save time + // but i want the solutions to be as separate as possible + + // so lets reset the count + for(int board = 0; board < bingo_board_count; board++) + { + bingo_bank[board].output = 0; + } + + // now we restart the process + int completed_boards = 0; + for(int ind = 0; ind < bingo_drawn_numbers_ct; ind++) + { +#ifdef DEBUG + printf("... drawing number ... #%d!\n", bingo_drawn_numbers[ind]); +#endif + for(int board = 0; board < bingo_board_count; board++) + { + if(bingo_bank[board].bingo_status) + { + continue; + } + if(bingo_add_new_entry(&bingo_bank[board], bingo_drawn_numbers[ind])) + { + p2_answer = bingo_board_compute_answer(&bingo_bank[board]); + bingo_bank[board].bingo_status = true; + ++completed_boards; + } +#ifdef DEBUG + print_bingo_board(&bingo_bank[board]); + printf("Number of completed boards: %d\n", completed_boards); +#endif + } + if(completed_boards >= bingo_board_count) + { + break; + } + } + + printf("Answer for part 2: %d\n", p2_answer); return 0; } @@ -195,7 +233,7 @@ bool bingo_add_new_entry(board_t* board, uint8_t num) bool bingo_board_win_check(const board_t* board) { - for(int wc = 0; wc < 12; wc++) + for(int wc = 0; wc < 10; wc++) { // found a winner check if((board->output & win_conditions[wc]) == win_conditions[wc]) diff --git a/day4/c/aoc_day4.o b/day4/c/aoc_day4.o index 29930e8..4e670ab 100644 Binary files a/day4/c/aoc_day4.o and b/day4/c/aoc_day4.o differ diff --git a/day4/input.txt b/day4/input.txt new file mode 100644 index 0000000..9438e91 --- /dev/null +++ b/day4/input.txt @@ -0,0 +1,601 @@ +93,35,66,15,6,51,49,67,16,77,80,8,1,57,99,92,14,9,13,23,33,11,43,50,60,96,40,25,22,39,56,18,2,7,34,68,26,90,75,41,4,95,71,30,42,5,46,55,27,98,79,12,65,73,29,28,17,48,81,32,59,63,85,91,52,21,38,31,61,83,97,62,44,70,19,69,36,47,74,58,78,24,72,0,10,88,37,87,3,45,82,76,54,84,20,94,86,53,64,89 + +14 33 79 61 44 +85 60 38 13 48 +51 34 11 19 7 +21 30 73 6 76 +41 4 65 18 91 + + 3 82 68 26 93 +61 90 29 69 92 +60 94 99 6 83 +77 80 2 58 55 +59 65 95 38 62 + +41 9 73 71 74 +66 24 45 5 55 +97 82 53 63 16 +12 19 88 87 27 +31 8 75 98 83 + +63 24 86 90 45 +41 92 42 83 77 +64 28 54 94 10 +15 93 57 29 50 +23 39 37 48 38 + + 1 31 7 0 54 + 9 59 79 19 96 +51 14 77 38 45 +30 76 42 65 91 +72 60 37 43 71 + +22 81 40 97 27 +83 28 41 1 76 +69 68 64 57 78 +59 38 63 89 29 + 8 58 18 66 72 + +39 32 21 94 37 +20 1 66 82 52 +10 56 40 13 62 +59 96 44 75 50 +41 83 6 90 28 + +90 33 1 57 34 +14 86 93 92 68 +54 37 95 11 77 +88 13 62 72 48 +96 65 67 85 80 + +47 48 82 96 85 +78 91 42 38 11 +79 94 49 24 27 +56 92 72 45 73 +75 0 70 4 68 + +48 51 94 17 58 +37 88 56 66 16 +27 97 14 45 83 +53 39 6 5 68 +47 57 28 31 11 + +35 66 19 68 73 +41 49 10 80 48 +39 50 79 23 59 +15 45 40 17 75 +88 86 71 8 0 + +58 48 41 22 11 +97 59 17 71 44 + 6 24 49 84 42 +89 27 23 82 9 +60 86 90 65 34 + +11 58 2 98 26 +90 52 60 14 12 +69 63 56 36 30 + 3 44 19 5 85 +95 84 31 51 79 + +39 62 64 29 24 +56 9 0 18 3 +22 74 77 47 98 +55 93 79 4 33 +78 53 11 26 75 + +38 82 8 25 55 +74 1 21 30 46 +12 4 62 45 52 +24 39 0 92 15 +19 54 51 57 88 + +16 28 48 19 43 +58 96 67 22 61 + 8 9 74 5 81 +78 59 49 71 15 +82 46 42 32 70 + +73 89 80 92 42 + 4 60 99 75 39 + 5 50 64 98 91 +49 11 9 51 85 +27 97 54 93 14 + +70 41 37 53 62 + 0 57 48 39 61 +10 85 59 74 76 + 2 7 1 4 81 +26 78 60 80 72 + + 8 50 43 73 80 +74 86 64 95 30 +45 69 71 65 55 +52 66 36 62 60 +25 53 63 46 5 + + 5 57 15 82 46 +23 96 72 29 43 +98 91 42 51 99 +70 25 64 45 16 + 4 40 48 97 11 + +37 93 48 23 99 +98 8 21 78 36 +52 73 5 55 11 +63 42 88 38 94 + 1 80 71 68 15 + +51 34 66 87 17 +20 54 74 14 55 +84 64 96 31 2 +62 43 76 5 45 +98 71 50 56 82 + +13 59 67 25 94 +41 89 27 60 2 +77 31 48 63 62 +24 49 32 76 87 +70 85 51 52 66 + +31 22 23 36 47 +45 55 61 89 72 +62 81 35 79 8 +24 82 38 91 76 +74 5 29 94 58 + + 2 41 6 13 34 +86 46 44 38 56 +28 19 50 1 12 +96 23 33 91 64 + 7 89 59 9 70 + +81 69 97 10 87 +83 56 7 53 96 +93 42 68 29 62 +78 66 2 55 60 + 4 5 15 98 99 + +80 40 93 94 25 +95 99 55 31 12 +29 90 43 52 38 +51 64 92 37 77 +21 4 85 20 17 + +44 73 69 38 95 +11 47 19 83 91 +96 92 22 31 21 +70 62 88 25 82 +18 40 98 34 94 + + 6 14 86 29 99 + 8 5 15 38 90 +44 43 51 77 80 +78 32 75 83 3 +53 13 71 66 52 + +55 3 93 75 54 +58 57 60 15 70 +67 51 81 96 74 + 6 35 29 32 44 +38 56 5 50 88 + +38 46 11 16 33 +83 6 88 93 43 +42 56 77 9 85 +76 69 49 58 22 +15 14 4 54 23 + +27 84 97 50 46 +98 14 60 87 72 +20 38 74 13 32 +18 96 92 21 99 +93 43 86 16 66 + +53 12 29 78 41 +13 70 71 4 97 +44 1 37 84 49 +17 0 22 72 63 +61 66 60 32 68 + +92 44 20 56 69 +73 22 18 31 48 +71 93 83 16 49 +81 89 79 38 30 +80 24 26 86 62 + +82 58 76 20 5 +56 34 84 80 38 +12 49 8 52 91 +41 62 1 77 48 +23 83 51 81 2 + +77 5 96 13 52 +61 85 46 54 48 +56 80 20 83 69 +39 42 28 87 16 +59 40 45 58 62 + +35 87 52 85 9 +18 55 71 63 58 +86 28 20 5 68 +26 76 93 66 44 +53 2 95 6 60 + +19 53 33 59 27 +58 95 74 26 9 +98 25 49 92 44 +76 20 41 66 88 +47 50 57 24 28 + +54 63 31 74 72 +91 19 3 23 14 +85 44 66 55 33 +18 17 86 7 78 +42 22 15 99 93 + +33 31 15 40 44 +41 86 18 94 66 +19 69 91 76 95 +99 11 70 42 56 +68 82 90 12 83 + +79 21 74 63 22 +99 76 27 17 34 +91 52 14 2 26 +13 93 81 35 75 +48 62 0 39 6 + +61 3 96 95 10 + 4 39 22 29 49 + 5 7 15 54 83 + 2 33 65 62 14 + 8 73 24 47 87 + +24 75 54 90 5 +59 26 52 37 23 +11 36 42 47 93 +44 88 45 21 96 + 6 58 73 60 86 + +57 2 67 75 90 +87 51 80 35 24 +98 36 79 5 21 + 6 78 0 94 25 +16 3 81 41 45 + +63 84 58 52 9 +38 57 87 20 40 + 5 68 14 98 29 +71 88 21 80 61 + 3 43 31 48 26 + + 2 92 45 28 18 +89 20 90 42 99 +40 52 87 63 91 +13 31 59 24 29 +70 79 34 82 15 + +95 82 62 2 53 +63 19 10 42 16 +69 28 22 92 56 +11 3 17 76 71 +58 70 27 6 93 + +83 43 99 11 58 + 9 79 4 76 6 +18 49 56 36 72 +31 91 8 34 78 + 7 96 66 98 95 + +87 31 90 33 53 +70 39 50 73 3 +89 17 64 97 65 +11 85 42 57 6 +88 44 26 47 54 + +37 90 50 65 25 +68 15 87 33 0 +24 63 30 98 57 +13 7 93 22 34 +55 75 70 14 16 + +48 77 51 15 33 +84 52 22 73 67 +25 47 34 95 89 + 3 45 42 17 93 +56 53 68 72 8 + +60 44 46 84 70 +34 94 76 79 98 +36 37 59 90 22 +23 39 2 48 15 +81 4 7 3 21 + +60 58 26 10 66 +53 18 38 80 24 +93 56 11 27 21 +51 86 94 64 52 +65 57 28 98 69 + +32 45 64 94 68 +66 67 53 50 16 +37 60 10 33 70 +76 87 69 78 88 +71 99 63 38 25 + +54 14 31 45 40 +27 17 91 78 96 +70 84 11 98 75 + 6 94 72 88 18 +65 9 56 33 92 + +40 33 82 38 85 +98 91 44 26 57 +73 34 32 25 46 +58 8 16 42 95 +20 1 67 54 90 + +34 88 27 63 73 +92 70 5 21 15 + 1 82 74 9 23 +33 66 78 85 30 + 3 75 53 37 72 + +22 11 43 8 69 +57 30 72 26 58 +45 55 23 88 21 +53 0 19 31 65 +62 66 46 39 15 + +57 71 75 51 44 +49 96 10 53 47 +77 93 28 91 74 +70 41 79 89 97 +26 45 59 56 80 + +28 69 48 13 43 +10 75 80 58 40 + 1 92 82 94 33 +47 74 60 53 18 +51 11 77 9 55 + +50 3 89 47 34 +26 15 68 79 45 +94 90 19 59 73 +62 29 46 74 44 +91 5 39 10 14 + +11 49 87 19 2 + 9 33 71 57 66 +82 46 83 64 55 +52 76 67 15 73 +88 39 34 85 61 + +34 82 64 97 39 +53 30 71 22 85 +73 86 88 93 44 +56 25 52 87 4 +67 7 31 2 83 + + 9 6 54 84 46 + 4 75 65 63 1 +81 66 72 71 43 +17 61 51 48 35 +14 56 70 50 13 + + 0 48 33 27 35 + 7 20 9 97 46 + 8 13 52 11 24 +40 56 50 64 75 +32 92 36 54 5 + +19 49 78 92 20 +97 87 80 64 9 +26 34 67 21 91 +63 85 68 88 28 +18 93 41 31 79 + +97 13 9 26 58 + 1 19 76 31 51 +95 65 37 48 88 +92 72 98 10 43 +69 28 29 5 62 + +81 86 83 31 43 +37 95 51 42 17 +54 3 99 23 40 +15 72 16 4 78 +49 48 76 38 52 + +66 97 55 6 62 +38 95 58 7 96 +61 93 45 41 50 +13 51 92 2 52 +15 8 36 37 17 + +27 60 58 69 16 + 0 92 24 25 61 +65 28 52 20 99 +87 12 3 21 31 +48 67 63 70 11 + +51 32 36 37 62 +33 38 46 6 63 +88 97 67 72 84 +54 23 3 81 94 +59 50 40 11 21 + +30 22 59 53 35 +46 88 12 9 78 +95 31 39 10 67 +86 73 42 43 1 +93 21 16 51 28 + +61 98 77 62 41 +42 93 58 66 89 +64 14 18 67 76 +21 17 43 79 44 +47 0 20 95 97 + +47 75 70 8 26 +82 98 13 61 96 +94 74 17 78 30 +15 85 46 31 11 +99 28 39 51 92 + + 8 54 19 9 30 +63 90 99 7 50 +14 45 74 65 82 +10 76 85 21 20 +80 48 94 6 93 + +32 13 76 35 2 +57 51 25 43 85 +89 87 26 15 95 +24 67 33 34 14 +23 47 39 64 71 + +83 82 79 50 23 +77 60 67 8 32 +55 38 33 26 37 +17 36 69 44 43 +49 9 52 70 39 + +94 79 82 74 99 + 7 90 6 76 3 + 0 91 81 11 17 + 2 28 29 22 78 +33 1 23 16 86 + +53 18 72 38 1 +75 70 19 10 99 +34 60 30 61 95 +80 78 51 83 22 +25 23 11 6 44 + + 8 17 15 21 6 +46 79 77 11 23 +25 14 59 42 95 +50 16 90 49 2 +81 56 51 96 76 + +37 27 62 8 35 +67 81 84 47 53 +32 13 80 15 66 +95 94 59 38 97 +64 26 63 75 78 + +23 71 88 61 20 +35 32 59 10 67 +17 36 38 89 75 +74 8 30 57 39 +97 58 55 70 15 + +82 37 71 56 15 +92 66 10 1 14 +26 60 70 50 89 +97 58 83 3 61 +41 6 35 88 13 + +16 7 54 9 31 +47 91 50 17 51 + 6 38 24 14 69 +48 3 0 77 5 +43 86 70 80 40 + +39 94 95 47 98 +46 41 45 38 48 +18 73 56 99 76 +74 75 26 30 16 +42 11 85 86 51 + +39 68 42 79 14 +48 90 75 4 41 +34 76 63 49 83 +64 86 92 98 65 +40 15 54 20 1 + +17 4 47 37 8 +19 15 36 6 60 +23 5 24 87 55 +51 12 94 18 90 +81 3 86 39 88 + +58 46 25 13 81 +72 17 64 28 51 +91 1 55 57 49 +20 39 11 5 52 +60 22 24 15 53 + +40 50 55 39 6 +79 38 44 52 81 +83 36 11 42 88 +48 4 32 8 71 +34 65 51 2 46 + +21 47 96 94 19 +31 38 55 64 24 +36 57 32 9 34 +43 61 11 41 56 +58 2 4 28 59 + +47 14 83 62 76 +18 61 22 80 54 +24 87 49 13 40 +44 82 34 78 10 +94 55 29 95 71 + +68 54 76 1 39 +46 4 50 82 85 +75 26 43 58 98 +29 47 49 81 12 +14 19 57 11 41 + +65 38 2 0 57 +23 19 4 79 70 +88 8 73 25 34 +15 28 77 24 39 +31 97 11 62 37 + +29 26 19 14 40 +12 88 22 42 96 +95 63 78 21 53 +35 50 9 39 43 +10 46 24 87 13 + + 4 94 52 42 67 +71 33 15 75 80 +45 49 61 64 58 +35 37 62 55 30 +87 79 31 96 41 + +75 61 94 3 52 +59 13 35 53 54 +85 81 79 96 57 +36 38 40 28 93 +70 95 39 43 5 + +33 79 74 21 32 + 0 18 43 5 28 +82 63 66 56 27 +42 76 61 98 73 +83 9 2 96 23 + +96 47 61 45 89 +40 77 15 55 25 +23 39 10 18 91 +31 70 1 30 75 +67 94 37 4 51 + + 3 5 10 80 89 +60 17 42 55 92 +38 32 52 0 56 +96 61 79 34 90 +43 2 98 4 27 + +74 95 14 35 49 +67 66 57 76 88 +89 71 68 69 48 +20 70 3 0 12 +13 21 15 51 24 diff --git a/day4/input_test.txt b/day4/input_test.txt new file mode 100644 index 0000000..09639a7 --- /dev/null +++ b/day4/input_test.txt @@ -0,0 +1,19 @@ +7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 + +22 13 17 11 0 + 8 2 23 4 24 +21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19 + + 3 15 0 2 22 + 9 18 13 17 5 +19 8 7 25 23 +20 11 10 24 4 +14 21 16 12 6 + +14 21 17 24 4 +10 16 15 9 19 +18 8 23 26 20 +22 11 13 6 5 + 2 0 12 3 7