summaryrefslogtreecommitdiff
path: root/022.c
diff options
context:
space:
mode:
Diffstat (limited to '022.c')
-rw-r--r--022.c69
1 files changed, 0 insertions, 69 deletions
diff --git a/022.c b/022.c
deleted file mode 100644
index c22aca8..0000000
--- a/022.c
+++ /dev/null
@@ -1,69 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <err.h>
-#include <string.h>
-#include "input.h"
-
-#define INPUT "input/02.txt"
-
-enum direction { forward, up, down };
-
-struct submarine_move {
- enum direction dir;
- int length;
-};
-
-void parse_move(char* string, struct submarine_move* move) {
- if(*string == 'f')
- move->dir = forward;
- else if(*string == 'u')
- move->dir = up;
- else if(*string == 'd')
- move->dir = down;
- else
- err(1, "direction inconnue %c", *string);
-
- size_t stringLength = strlen(string);
- char digit = string[stringLength - 2];
- if(digit < '0' || digit > '9')
- err(1, "longueur inconnue %c", digit);
- move->length = digit - '0';
-}
-
-int main() {
- // lecture du fichier d'entree
- FILE* file=fopen(INPUT,"r");
- if(file == NULL)
- err(1, "Le fichier %s n'existe pas\n", INPUT);
-
- size_t lineCount = count_lines(file);
- char** input = malloc(lineCount * sizeof(char*));
- read_lines_as_string(file, input, lineCount);
- // fermeture du fichier
- fclose(file);
-
- // l'algo
- struct submarine_move currentMove;
- long forwardDst = 0;
- long downDst = 0;
- long aim = 0;
- for(size_t i = 0; i < lineCount; i++) {
- parse_move(input[i], &currentMove);
- switch(currentMove.dir) {
- case forward:
- forwardDst += currentMove.length;
- downDst += currentMove.length * aim;
- continue;
- case up:
- aim -= currentMove.length;
- continue;
- case down:
- aim += currentMove.length;
- continue;
- }
- }
- printf("%ld\n", forwardDst * downDst);
-
- free_strings(input, lineCount);
- return 0;
-}