aoc

Advent of code
git clone https://codeberg.org/night0721/aoc
Log | Files | Refs

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 }