Day 1
commit
1c4fc7e755
@ -0,0 +1,7 @@
|
|||||||
|
*.in
|
||||||
|
*.out
|
||||||
|
compile_commands.json
|
||||||
|
.cache/
|
||||||
|
|
||||||
|
day_*
|
||||||
|
!day_*.c
|
@ -0,0 +1,9 @@
|
|||||||
|
CC ?= clang
|
||||||
|
CFLAGS = -O0 -g -Wall -Wextra
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
day_1: day_1.o
|
||||||
|
$(CC) -o $@ $^
|
||||||
|
./day_1 day_1.in
|
@ -0,0 +1,76 @@
|
|||||||
|
#include "stdio.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
int compare(const void* a, const void* b) {
|
||||||
|
return (*(int*)a - *(int*)b);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
int size = 0;
|
||||||
|
int lines = 0;
|
||||||
|
int sum = 0;
|
||||||
|
int* list1 = NULL;
|
||||||
|
int* list2 = NULL;
|
||||||
|
|
||||||
|
if(argc < 2) {
|
||||||
|
fprintf(stderr, "Filename required\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE* file = fopen(argv[1], "r");
|
||||||
|
if(file == NULL) {
|
||||||
|
fprintf(stderr, "Could not open %s\n", argv[1]);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* line = NULL;
|
||||||
|
size_t line_size = 0;
|
||||||
|
while(getline(&line, &line_size, file) > 0) {
|
||||||
|
lines += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
rewind(file);
|
||||||
|
list1 = malloc(sizeof(int)*lines);
|
||||||
|
list2 = malloc(sizeof(int)*lines);
|
||||||
|
|
||||||
|
for(int i = 0; i < lines; i++) {
|
||||||
|
char* line_save = NULL;
|
||||||
|
getline(&line, &line_size, file);
|
||||||
|
char* num1 = strtok_r(line, " ", &line_save);
|
||||||
|
char* num2 = strtok_r(NULL, " ", &line_save);
|
||||||
|
if(num1 == NULL || num2 == NULL) continue;
|
||||||
|
|
||||||
|
list1[i] = atoi(num1);
|
||||||
|
list2[i] = atoi(num2);
|
||||||
|
size += 1;
|
||||||
|
}
|
||||||
|
free(line);
|
||||||
|
|
||||||
|
qsort(list1, size, sizeof(int), compare);
|
||||||
|
qsort(list2, size, sizeof(int), compare);
|
||||||
|
|
||||||
|
for(int i = 0; i < size; i++) {
|
||||||
|
sum += abs(list1[i] - list2[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stdout, "Sum: %d\n", sum);
|
||||||
|
|
||||||
|
int similarity = 0;
|
||||||
|
int* counts = malloc(sizeof(int)*size);
|
||||||
|
memset(counts, 0, sizeof(int)*size);
|
||||||
|
|
||||||
|
for(int i = 0; i < size; i++) {
|
||||||
|
for(int j = 0; j < size; j++) {
|
||||||
|
if(list1[i] == list2[j]) counts[i] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
similarity += list1[i] * counts[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stdout, "Similarity: %d\n", similarity);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue