diff --git a/3_2/Makefile b/3_2/Makefile new file mode 100644 index 0000000..ba44bd3 --- /dev/null +++ b/3_2/Makefile @@ -0,0 +1,13 @@ +client: main.c + gcc -o main main.c -O3 -Wall -Wextra -g -march=x86-64-v3 + +client-debug: main.c + gcc -o main main.c -O1 -Wall -Wextra -g -fsanitize=address + +client-debug-nosanitize: main.c + gcc -o main main.c -O1 -Wall -Wextra -g + +clean: + rm main + +.PHONY: clean \ No newline at end of file diff --git a/3_2/main.c b/3_2/main.c new file mode 100644 index 0000000..c70fc38 --- /dev/null +++ b/3_2/main.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +char input[] = +{ +#embed "input.txt" +,'\0' // null terminator +}; + +int width = 0; +int height = 0; + +uint64_t power(uint64_t base, uint64_t exp) { + uint64_t i, result = 1; + for (i = 0; i < exp; i++) + result *= base; + return result; +} + +int main(int argc, char *argv[]){ + clock_t start, end; + start = clock(); + + while(input[width] != '\n'){ + width++; + } + //printf("width: %d\n", width); + + while(input[height*(width+1)+1] != 0){ + height++; + } + uint64_t count = 0; + for(int i = 0; i < height; i++){ + //printf("\nChecking bank %d\n", i); + uint64_t biggest[12]; + int biggest_index = -1; + memset(biggest, 0, 12*sizeof(uint64_t)); + + for(int x = 0; x<12; x++){ + //printf("\tSearching for digit %d\n", x); + for(int o = biggest_index+1; o < width-11+x; o++){ + + int num = input[i*(width+1)+o]-0x30; + //printf("\t\tChecking: %d, index %d\n", num, o); + if(num>biggest[x]){ + //printf("\t\t\tNew Biggest: %d, index %d\n", num, o); + biggest[x] = num; + biggest_index = o; + } + } + //printf("count: %lu += %lu * %lu\n", count, biggest[x], power(10, 11-x)); + count += biggest[x]*power(10, 11-x); + //printf("count: %lu \n", count); + } + //for(int x = 0; x<12; x++){ + // + //} + //printf(input); + //printf("count: %lu\n", count); + } + + end = clock(); + printf("count: %lu\n", count); + clock_t ticks_taken = end - start; + double time_taken = ((double)ticks_taken)/CLOCKS_PER_SEC; + printf("time take: %f ticks\n", time_taken); + printf("CLOCKS_PER_SEC: %ld\n", CLOCKS_PER_SEC); + + + exit(1); +} \ No newline at end of file