X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=grid.c;h=97ba7d7f3c2306e8921bf81b6e97af18d939849d;hb=54a35ad5a96cc57816a9e05ab9d1e1513c202894;hp=d796cabee7b4ed2bda6fb00d31810f6a0f0096e6;hpb=2d604d8b8a380f7f3028c234282bfdcf12f95dad;p=wordgame diff --git a/grid.c b/grid.c index d796cab..97ba7d7 100644 --- a/grid.c +++ b/grid.c @@ -45,13 +45,13 @@ typedef struct _board { dict_t *results; } board_t; -int +static int rand_within (int num_values) { return (int) ((double) num_values * (rand() / (RAND_MAX + 1.0))); } -void +static void shuffle (int *array, int length) { int i, r, tmp; @@ -65,7 +65,7 @@ shuffle (int *array, int length) } } -void +static void board_init (board_t *board) { int i; @@ -79,7 +79,7 @@ board_init (board_t *board) board->letters[i / 4][i % 4] = cube_faces[cubes[i]][rand_within(6)]; } -void +static void board_print (board_t *board) { int x, y; @@ -98,12 +98,12 @@ board_print (board_t *board) } #define SEEN_BIT(x, y) (1 << (4*(y)+(x))) -void +static void board_enumerate (board_t *board, int x, int y, int16_t seen, - string_t *word, + char *word, dict_cursor_t dict_cursor) { char c; @@ -122,24 +122,24 @@ board_enumerate (board_t *board, seen |= SEEN_BIT (x, y); c = board->letters[y][x]; - string_append_char (word, c); + word[strlen (word)] = c; dict_cursor = dict_cursor_next (dict_cursor, c); if (c == 'q') { - string_append_char (word, 'u'); + word[strlen (word)] = 'u'; dict_cursor = dict_cursor_next (dict_cursor, 'u'); } if (DICT_ENTRY_IS_WORD (dict_cursor_resolve (dict_cursor))) - dict_add_word (board->results, word->s); + dict_add_word (board->results, word); for (dy = -1; dy <= 1; dy++) for (dx = -1; dx <= 1; dx++) board_enumerate (board, x + dx, y + dy, seen, word, dict_cursor); if (c == 'q') - string_chop (word); - string_chop (word); + word [strlen (word) - 1] = '\0'; + word [strlen (word) - 1] = '\0'; } static void @@ -147,17 +147,15 @@ board_solve (board_t *board, dict_t *dict, dict_t *solution) { int x, y; int16_t seen = 0; - string_t word; + char word[17]; board->results = solution; - string_init (&word); + memset (word, '\0', 17); for (y = 0; y < 4; y++) for (x = 0; x < 4; x++) - board_enumerate (board, x, y, seen, &word, dict_root (dict)); - - string_fini (&word); + board_enumerate (board, x, y, seen, word, dict_root (dict)); } static bool_t @@ -182,7 +180,6 @@ main (void) int remaining, minutes, seconds; int found, missed; char prompt[7], *response; - string_t word; gettimeofday (&tv, NULL); srand (tv.tv_sec ^ tv.tv_usec); @@ -206,11 +203,12 @@ main (void) sprintf (prompt, "%02d:%02d ", minutes, seconds); response = readline (prompt); add_history (response); - chomp (response); if (strlen (response) == 0) { board_print (&board); } else { dict_entry_t *entry; + if (response[strlen (response) - 1] == '\n') + response[strlen (response) - 1] = '\0'; entry = dict_lookup (&solution, response); if (DICT_ENTRY_IS_WORD (entry)) { if (*entry & GRID_WORD_SEEN)