diff options
| author | kartofen <mladenovnasko0@gmail.com> | 2022-12-02 18:53:27 +0200 | 
|---|---|---|
| committer | kartofen <mladenovnasko0@gmail.com> | 2022-12-02 18:53:27 +0200 | 
| commit | 41085185b9a69e455a72d6beed8f29c52967d21d (patch) | |
| tree | eff276573bef8a50b312045270b36e328d95a7a5 /Advent-of-Code-2022/aoc-1/main.c | |
| parent | 4e9132b983c771d3e70d5a6b8bcdfdb1fead81fa (diff) | |
add 2022
Diffstat (limited to 'Advent-of-Code-2022/aoc-1/main.c')
| -rw-r--r-- | Advent-of-Code-2022/aoc-1/main.c | 75 | 
1 files changed, 75 insertions, 0 deletions
| diff --git a/Advent-of-Code-2022/aoc-1/main.c b/Advent-of-Code-2022/aoc-1/main.c new file mode 100644 index 0000000..7cb961e --- /dev/null +++ b/Advent-of-Code-2022/aoc-1/main.c @@ -0,0 +1,75 @@ +#include <stdio.h> +#include <stdlib.h> +#include <limits.h> + +#if 0 +  #define FILENAME "sample.txt" +#else +  #define FILENAME "input.txt" +#endif + +int biggest[3]; + +int bigger(int val) +{ +    for(int i = 2; i >= 0; i--) +        if(val > biggest[i]) return i; +    return -1; +} + +void shift(int n, int val) +{ +    for(int i = 1; i <= n; i++) +        biggest[i-1] = biggest[i]; + +    biggest[n] = val; +} + +void check(int val) +{ +    int b = bigger(val); +    if(b != -1) +        shift(b, val); +} + +void parse() +{ +    FILE *fp = fopen(FILENAME, "r"); +    if(!fp) { +        fprintf(stderr, "ERROR: Could not open file %s\n", FILENAME); +        exit(1); +    } + +    char line[256]; +    int sum = 0; +    while(fgets(line, sizeof(line), fp) != NULL) +    { +        if(line[0] == '\n') { +            check(sum); +            sum = 0; +        } + +        sum += atoi(line); +    } +    check(sum); // the file does not end in a newline + +    fclose(fp); +} + +int main(void) +{ +    for(int i = 0; i < 3; i++) +        biggest[i] = INT_MIN; + +    parse(); + +    int sum = 0; +    for(int i = 0; i < 3; i++) { +        printf("%d\n", biggest[i]); +        sum += biggest[i]; +    } + +    printf("\n%d\n", sum); + +    return 0; +} | 
