#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; } uint64_t gen_div(int len, int spacing){ uint64_t div = 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])=2; i--){ if(!(num%i)){ divs[count] = i; count++; } } divs[count] = 0; return divs; } uint64_t check_range(uint64_t start, uint64_t end){ int num = numPlaces(start); uint64_t res = 0; for(int i = 2; i