From 8d6b76e940550936f36dee3e32bd75ec07697427 Mon Sep 17 00:00:00 2001 From: laura Date: Mon, 8 Dec 2025 22:32:53 +0100 Subject: [PATCH] initialized 2_2 identical to 2 --- 2_2/Makefile | 13 ++++ 2_2/main.c | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 214 insertions(+) create mode 100644 2_2/Makefile create mode 100644 2_2/main.c diff --git a/2_2/Makefile b/2_2/Makefile new file mode 100644 index 0000000..ba44bd3 --- /dev/null +++ b/2_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/2_2/main.c b/2_2/main.c new file mode 100644 index 0000000..d45a6ef --- /dev/null +++ b/2_2/main.c @@ -0,0 +1,201 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +char input[] = +{ +#embed "input.txt" +,'\0' // null terminator +}; + +//char input[] = "L68\nL30\nR48\nL5\nR60\nL55\nL1\nL99\nR14\nL82\n"; +int width = 0; +int height = 0; +uint64_t result = 0; +uint64_t result_2 = 0; + + +uint64_t parseNum(char* str, int* len){ + int i = 0; + uint64_t out = 0; + while(str[i] != ',' && str[i] != '-' && str[i] != '\n'){ + out += str[i]-0x30; + out *= 10; + i++; + } + out /=10; + *len = i; + return out; +} + +int numPlaces (uint64_t n) { + int r = 1; + while (n > 9) { + n /= 10; + r++; + } + //printf("%d has %d places\n", n, r); + return r; +} + +uint64_t power(uint64_t base, uint64_t exp) { + uint64_t i, result = 1; + for (i = 0; i < exp; i++) + result *= base; + return result; + } + +bool check_silly(uint64_t in){ + int num = numPlaces(in); + + if(!(num%2)){ + uint64_t div = 1+power(10, num/2); + //printf("check dividend is %d\n", div); + if(in%div == 0){ + return true; + } + } + return false; +} + +void sort_ranges(uint64_t* starts, uint64_t* ends, int len){ + int curr_min = 0; + for(int i = 0; istarts[o]){ + curr_min = o; + } + } + uint64_t tmp_start = starts[curr_min]; + uint64_t tmp_end = ends[curr_min]; + + starts[curr_min] = starts[i]; + ends[curr_min] = ends[i]; + + starts[i] = tmp_start; + ends[i] = tmp_end; + } +} + +//splits ranges that go over a decimal overflow barrier into two (or if necessary more) ranges +void optimize_ranges(uint64_t* starts, uint64_t* ends, int* len){ + for(int i = 0; i<(*len); i++){ + if(numPlaces(starts[i])