From 04e79fa276ae1c3620868d85941b2c7b7c11222a Mon Sep 17 00:00:00 2001 From: Vincent Douillet Date: Fri, 3 Dec 2021 14:09:39 +0100 Subject: day 3 --- .gitignore | 2 ++ 03.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 5 ++++- 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 03.c diff --git a/.gitignore b/.gitignore index 54be510..4cbdfc9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ +?? ??? *.o input/ *.swp +answer.csv diff --git a/03.c b/03.c new file mode 100644 index 0000000..02af910 --- /dev/null +++ b/03.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include "input.h" + +#define INPUT "input/03.txt" +#define INPUT_SIZE 12 + +void part1(char** input, size_t lineCount) { + int oneCount[INPUT_SIZE]; + for(int k = 0; k < INPUT_SIZE; k++) { + oneCount[k] = 0; + } + + for(size_t i = 0; i < lineCount; i++) { + char* line = input[i]; + for(int j = 0; j < INPUT_SIZE; j++) { + if(line[j] == '1') + oneCount[j]++; + } + } + + // null terminated string + char binary[INPUT_SIZE + 1]; + for(int h = 0; h < INPUT_SIZE; h++) { + binary[h] = oneCount[h] > lineCount / 2.0f ? '1' : '0'; + } + binary[INPUT_SIZE] = '\0'; + char* endp = NULL; + unsigned long gamma = strtoul(binary, &endp, 2); + unsigned long epsilon = gamma ^ 0xFFF; + if(*endp != '\0') + err(1, "erreur de parsing du gammaat"); + + printf("%ld\n", gamma * epsilon); +} + +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); + + part1(input, lineCount); + + free_strings(input, lineCount); + return 0; +} diff --git a/Makefile b/Makefile index 1a2b7e9..baca8e6 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ CC=cc CFLAGS=-std=c1x -W -Wall -g LDFLAGS= -EXEC=011 012 021 022 +EXEC=011 012 021 022 03 all: $(EXEC) @@ -17,6 +17,9 @@ all: $(EXEC) 022: input.o 022.o $(CC) -o $@ $> $(LDFLAGS) +03: input.o 03.o + $(CC) -o $@ $> $(LDFLAGS) + .c.o: $(CC) -o $@ -c $< $(CFLAGS) -- cgit v1.2.3