2022-09-10 14:01:13 -04:00
|
|
|
#include <stdio.h>
|
2022-09-10 14:16:43 -04:00
|
|
|
#include <string.h>
|
2022-09-10 14:01:13 -04:00
|
|
|
#include "boilerplate.h"
|
|
|
|
|
|
|
|
int compare(const void * a, const void * b) {
|
|
|
|
return ((signature *)a)->sign - ((signature *)b)->sign;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t getsig(char * word) {
|
|
|
|
uint32_t result = 0;
|
|
|
|
for (uint32_t i = 0; i < 5; i++) {
|
|
|
|
uint32_t bit = 1u << (word[i] & CHARMASK);
|
|
|
|
if (result & bit) {
|
|
|
|
// duplicate letters
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
result |= bit;
|
|
|
|
}
|
|
|
|
return result;
|
2022-09-10 14:16:43 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
2022-09-10 14:01:13 -04:00
|
|
|
}
|