diff --git a/boilerplate.c b/boilerplate.c index d4a9430..63a1564 100644 --- a/boilerplate.c +++ b/boilerplate.c @@ -8,10 +8,10 @@ extern uint32_t rawWC; #endif int compare(const void * a, const void * b) { - return ((signature *)a)->sign - ((signature *)b)->sign; + return ((signature*)a)->sign - ((signature*)b)->sign; } -uint32_t getsig(char * word) { +uint32_t getsig(char* restrict word) { uint32_t result = 0; for (uint32_t i = 0; i < 5; i++) { uint32_t bit = 1u << (word[i] & CHARMASK); @@ -24,7 +24,7 @@ uint32_t getsig(char * word) { return result; } -uint32_t rmdups(signature * arr, uint32_t nitems) { +uint32_t rmdups(signature* restrict arr, uint32_t nitems) { // list is already sorted for (uint32_t i = 0; i < nitems; i++) { while (arr[i].sign == arr[i + 1].sign) { @@ -58,7 +58,7 @@ signature* makeArray(FILE * f, uint32_t* arrlen) { return sigs; } -void printDashed(uint32_t n) { +void printDashed(const uint32_t n) { for (uint32_t i = A_BIT; i < Z_BIT; i <<= 1) { if (i & n) { char c = 'A'; @@ -74,7 +74,7 @@ void printDashed(uint32_t n) { } } -void printsigs(signature* sigs, uint32_t nitems, ...) { +void printsigs(signature* restrict sigs, uint32_t nitems, ...) { va_list args; va_start(args, nitems); diff --git a/boilerplate.h b/boilerplate.h index 86a9f32..9a6ef63 100644 --- a/boilerplate.h +++ b/boilerplate.h @@ -37,7 +37,7 @@ uint32_t rawWC = 0; #define CHARMASK ~0b1100000u #define A_BIT 0b10u #define Z_BIT (A_BIT << 26) - #define MAX(a,b) (a > b) ?a :b + #define MAX(a,b) ((a > b) ? a : b) #if PRINT_INTERMEDIATES #if FANCYPRINT @@ -63,12 +63,12 @@ typedef struct signature { /* */ signature* makeArray(FILE *, uint32_t*); - uint32_t getsig(char*); + uint32_t getsig(char* restrict); int compare(const void*, const void*); - uint32_t rmdups(signature*, uint32_t); + uint32_t rmdups(signature* restrict, const uint32_t); - void findWords(signature*, uint32_t); - void printsigs(signature*, uint32_t, ...); - void printDashed(uint32_t); + void findWords(signature* restrict, const uint32_t); + void printsigs(signature* restrict, const uint32_t, ...); + void printDashed(const uint32_t); /* */ diff --git a/solvedle.c b/solvedle.c index db2410b..3c3f400 100644 --- a/solvedle.c +++ b/solvedle.c @@ -72,7 +72,7 @@ int main(int argc, char * argv[]) { return 0; } -void findWords(signature* sigs, uint32_t len) { +void findWords(signature* restrict sigs, const uint32_t len) { START_TIME("finding starts") // for each index, locate the first index of // a word that shares no letters with it, and @@ -94,29 +94,27 @@ void findWords(signature* sigs, uint32_t len) { START_TIME("finding words") // the big loop. for (uint32_t i1 = 0; i1 < endindex; i1++) { - uint32_t a = sigs[i1].sign; + const uint32_t a = sigs[i1].sign; for (uint32_t i2 = START(i1); i2 < endindex; i2++) { - uint32_t b = sigs[i2].sign; - if (a & b) { continue; } - uint32_t ab = a | b; + do { i2++; } while (a & sigs[i2].sign); + const uint32_t ab = a | sigs[i2].sign; PRINT2 for (uint32_t i3 = START(i2); i3 < endindex; i3++) { - uint32_t c = sigs[i3].sign; - if (ab & c) { continue; } - uint32_t abc = ab | c; + do { i3++; } while (ab & sigs[i3].sign); + const uint32_t abc = ab | sigs[i3].sign; PRINT3 for (uint32_t i4 = START(i3); i4 < endindex; i4++) { - uint32_t d = sigs[i4].sign; + const uint32_t d = sigs[i4].sign; if (abc & d) { continue; } - uint32_t abcd = abc | d; + const uint32_t abcd = abc | d; PRINT4 - uint32_t i5start = START(i4); + const uint32_t i5start = START(i4); for (uint32_t i5 = MAX(endindex, i5start); i5 < len; i5++) { - uint32_t e = sigs[i5].sign; + const uint32_t e = sigs[i5].sign; if (abcd & e) { continue; } #if FANCYPRINT printsigs(sigs, 5, i1, i2, i3, i4, i5);