1.c (2611B)
1 #include "../../util.h" 2 3 #include <stdio.h> 4 #include <string.h> 5 #include <stdlib.h> 6 #include <ctype.h> 7 #include <stdbool.h> 8 #include <assert.h> 9 10 int main() { 11 FILE *inputfile = fopen("./input", "r"); 12 char line[2048] = { 0 }; 13 size_t len = 0; 14 ssize_t read; 15 if (inputfile == NULL) { 16 printf("Input file not found. Exiting."); 17 exit(1); 18 } 19 char **lines = malloc(sizeof(char *) * 1024); 20 int total = 0; 21 while (fgets(line, 2048, inputfile)) { 22 char **split = str_split(line, '|'); 23 char *left = split[0]; 24 char *right = split[1]; 25 26 int *win_num = malloc(sizeof(int) * 1024); 27 char *winning_numbers = str_split(left, ':')[1]; 28 winning_numbers = trimwhitespace(winning_numbers); 29 // check consecutive space then shift characters to left 30 for (int i = 0; i < strlen(winning_numbers); i++) { 31 if (winning_numbers[i] == ' ' && winning_numbers[i + 1] == ' ') { 32 // shift chracters to left 33 for (int j = i; j < strlen(winning_numbers); j++) { 34 winning_numbers[j] = winning_numbers[j + 1]; 35 } 36 } 37 } 38 char **winning_numbers_split = str_split(winning_numbers, ' '); 39 int winning_count = 0; 40 while (winning_numbers_split[winning_count] != NULL) { 41 win_num[winning_count] = atoi(winning_numbers_split[winning_count]); 42 winning_count++; 43 } 44 int *gambled_num = malloc(sizeof(int) * 1024); 45 right = trimwhitespace(right); 46 // check consecutive space then shift characters to left 47 for (int i = 0; i < strlen(right); i++) { 48 if (right[i] == ' ' && right[i + 1] == ' ') { 49 // shift chracters to left 50 for (int j = i; j < strlen(right); j++) { 51 right[j] = right[j + 1]; 52 } 53 } 54 } 55 56 char **gambled_numbers = str_split(right, ' '); 57 int gambled_count = 0; 58 int score = 0; 59 while (gambled_numbers[gambled_count] != NULL) { 60 int winning_counter = 0; 61 gambled_num[gambled_count] = atoi(gambled_numbers[gambled_count]); 62 while (win_num[winning_counter] != NULL) { 63 if (gambled_num[gambled_count] == win_num[winning_counter]) { 64 if (score != 1 && score > 0) score *= 2; 65 else score++; 66 } 67 winning_counter++; 68 } 69 gambled_count++; 70 } 71 total += score; 72 } 73 printf("Sum: %d\n", total); 74 }