X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=rack.c;h=e3ef2096ba41cb9aa4d343d59f89eba9f823ccbe;hb=a46e558ad8d3243c76a9a6cafb6100be4f3f2dae;hp=fa0cdc1f6f45873770685d1cca05612bd4b9c6cd;hpb=0cb3ed6bc1a5fc1c4e88b0785fd6eb11aa7ca7d5;p=wordgame diff --git a/rack.c b/rack.c index fa0cdc1..e3ef209 100644 --- a/rack.c +++ b/rack.c @@ -23,78 +23,6 @@ #include #include -char bag_orig[101] = -"AAAAAAAAABBCCDDDDEEEEEEEEEEEEFFGGGHHIIIIIIIIIJKLLLL" -"MMNNNNNNOOOOOOOOPPQRRRRRRSSSSTTTTTTUUUUVVWWXYYZ??"; - -static int -rand_within (int num_values) -{ - return (int) ((double) num_values * (rand() / (RAND_MAX + 1.0))); -} - -static void -shuffle (char *array, int length) -{ - int i, r, tmp; - - for (i = 0; i < length; i++) - { - r = i + rand_within (length - i); - tmp = array[i]; - array[i] = array[r]; - array[r] = tmp; - } -} - -static const char *subanagram_anagram; -static char subanagram_enumerate_word[WORD_GAME_MAX_WORD_LENGTH]; -static dict_t *subanagram_enumerate_answers; - -static void -subanagram_enumerate (dict_cursor_t cursor, - uint8_t seen) -{ - char c; - unsigned int i, last; - uint8_t next_seen; - - if (cursor == DICT_CURSOR_NIL) - return; - - if (DICT_ENTRY_IS_WORD (dict_cursor_resolve (cursor))) - dict_add_word (subanagram_enumerate_answers, subanagram_enumerate_word); - - last = strlen (subanagram_enumerate_word); - - for (i = 0; i < strlen (subanagram_anagram); i++) { - if (seen & (1 << i)) - continue; - next_seen = seen | (1 << i); - c = subanagram_anagram[i]; - if (c == '?' || c == '_') { - for (c = 'a'; c <= 'z'; c++) { - subanagram_enumerate_word[last] = c; - subanagram_enumerate (dict_cursor_next (cursor, c), next_seen); - } - } else { - subanagram_enumerate_word[last] = c; - subanagram_enumerate (dict_cursor_next (cursor, c), next_seen); - } - subanagram_enumerate_word[last] = '\0'; - } -} - -static void -subanagram_expand (const char *anagram, dict_t *dict, dict_t *answers) -{ - subanagram_anagram = anagram; - memset (subanagram_enumerate_word, '\0', WORD_GAME_MAX_WORD_LENGTH); - subanagram_enumerate_answers = answers; - - subanagram_enumerate (dict_root (dict), 0); -} - static int character_compare (const void *_a, const void *_b) @@ -114,15 +42,16 @@ main (void) { dict_t dict, solution; struct timeval tv; - char bag[100], rack[8]; + bag_t bag; + char rack[8]; gettimeofday (&tv, NULL); srand (tv.tv_sec ^ tv.tv_usec); - memcpy (bag, bag_orig, 100); - shuffle (bag, 100); + bag_init (&bag); + bag_shuffle (&bag); - memcpy (rack, bag, 7); + memcpy (rack, bag.tiles, 7); rack[7] = '\0'; qsort (rack, 7, 1, character_compare);