github.com/cycloss/advent-of-code@v0.0.0-20221210145555-15039b95faa6/2020/day1/day1.c (about) 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define INPUT_FILE_1 "day1.txt" 5 #define MAX_CHAR 200 6 7 void partOne() { 8 9 FILE* dayOneInput = fopen(INPUT_FILE_1, "r"); 10 11 char buckets[2000] = { 0 }; 12 13 for (char buffer[MAX_CHAR]; fgets(buffer, MAX_CHAR, dayOneInput);) { 14 int num = atoi(buffer); 15 int searchVal = 2020 - num; 16 if (buckets[searchVal]) { 17 printf("Nums: %d, %d\n", num, searchVal); 18 printf("Answer: %d\n", num * searchVal); 19 break; 20 } 21 buckets[num] = 1; 22 } 23 24 fclose(dayOneInput); 25 } 26 27 #define BUCKET_COUNT 10000 28 29 typedef struct { 30 int num1; 31 int num2; 32 } numPair; 33 34 numPair* createNumPair(int num1, int num2) { 35 numPair* np = malloc(sizeof(numPair)); 36 *np = (numPair) { num1, num2 }; 37 return np; 38 } 39 40 void freePairs(numPair** buckets, int len) { 41 for (int i = 0; i < len; i++) { 42 if (buckets[i]) { 43 free(buckets[i]); 44 } 45 } 46 } 47 48 void partTwo() { 49 50 FILE* inputFile = fopen(INPUT_FILE_1, "r"); 51 FILE* inputFile2 = fopen(INPUT_FILE_1, "r"); 52 53 numPair* buckets[BUCKET_COUNT] = { NULL }; 54 for (char buffer[MAX_CHAR]; fgets(buffer, MAX_CHAR, inputFile);) { 55 int num1 = atoi(buffer); 56 for (char buffer2[MAX_CHAR]; fgets(buffer2, MAX_CHAR, inputFile2);) { 57 int num2 = atoi(buffer2); 58 int addition = num2 + num1; 59 if (!buckets[addition]) { 60 buckets[addition] = createNumPair(num1, num2); 61 } 62 } 63 fseek(inputFile2, 0, SEEK_SET); 64 } 65 66 for (char buffer[MAX_CHAR]; fgets(buffer, MAX_CHAR, inputFile2);) { 67 int num = atoi(buffer); 68 int searchVal = 2020 - num; 69 if (buckets[searchVal]) { 70 printf("Nums: %d, %d, %d\n", buckets[searchVal]->num1, buckets[searchVal]->num2, num); 71 printf("Answer: %d\n", buckets[searchVal]->num1 * buckets[searchVal]->num2 * num); 72 break; 73 } 74 } 75 76 freePairs(buckets, BUCKET_COUNT); 77 fclose(inputFile); 78 fclose(inputFile2); 79 } 80 81 int main() { 82 printf("Part one:\n"); 83 partOne(); 84 printf("\nPart two:\n"); 85 partTwo(); 86 return 0; 87 }