diff --git a/boilerplate.c b/boilerplate.c index 2848a59..42c7f40 100644 --- a/boilerplate.c +++ b/boilerplate.c @@ -1,4 +1,5 @@ #include +#include #include "boilerplate.h" int compare(const void * a, const void * b) { @@ -16,4 +17,15 @@ uint32_t getsig(char * word) { result |= bit; } return result; +} + +uint32_t rmdups(signature * arr, uint32_t nitems) { + // list is already sorted + for (uint32_t i = 0; i < nitems; i++) { + while (arr[i].sign == arr[i + 1].sign) { + memmove( &arr[ i ], &arr[ i + 1 ], (nitems - i) * sizeof(signature)); + nitems--; + } + } + return nitems; } \ No newline at end of file diff --git a/boilerplate.h b/boilerplate.h index f50033f..e822a31 100644 --- a/boilerplate.h +++ b/boilerplate.h @@ -64,5 +64,5 @@ typedef struct signature { uint32_t getsig(char*); void findWords(signature*, uint32_t); - signature* rmdups(signature*); + uint32_t rmdups(signature*, uint32_t); /* */ diff --git a/solvedle.c b/solvedle.c index 2314a06..109f654 100644 --- a/solvedle.c +++ b/solvedle.c @@ -5,9 +5,8 @@ #include "boilerplate.h" uint32_t - rawWC = 0, - fiveUniqWC = 0, - cookedWC = 0 + rawWC, + fiveUniqWC ; void findWords(signature* sigs, uint32_t len) { @@ -52,19 +51,6 @@ void findWords(signature* sigs, uint32_t len) { return; } -signature* rmdups(signature * arr) { - // list is already sorted - uint32_t nitems = fiveUniqWC; - for (uint32_t i = 0; i < nitems; i++) { - while (arr[i].sign == arr[i + 1].sign) { - memmove( &arr[ i ], &arr[ i + 1 ], (nitems - i) * sizeof(signature)); - nitems--; - } - } - cookedWC = nitems; - return arr; -} - signature* makeArray(FILE * f) { signature* sigs = (signature*) calloc(WORDS, sizeof(signature)); char word[WORDLEN + sizeof(char)]; // 5 letters + \n @@ -121,10 +107,10 @@ int main(int argc, char * argv[]) { END_TIME START_TIME("removing duplicates") - sigs = rmdups(sigs); + uint32_t cookedWC = rmdups(sigs, fiveUniqWC); END_TIME #else - cookedWC = fiveUniqWC; + uint32_t cookedWC = fiveUniqWC; #endif #if PRINT_INTERMEDIATES