From 71cfb7fbe93b80d52176650b4e67df3140c134cc Mon Sep 17 00:00:00 2001 From: Ian C Date: Thu, 19 Jul 2018 08:26:56 +0000 Subject: Added missing letters mode. --- codeword.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/codeword.c b/codeword.c index 38f8c87..fc68f3a 100644 --- a/codeword.c +++ b/codeword.c @@ -24,9 +24,16 @@ #include #include +typedef enum +{ + eLetter, + eNumber, + eMissing +} CharacterClass; + typedef struct { - int is_letter; + CharacterClass type; int number; char letter; } Character; @@ -59,7 +66,7 @@ static int ContainsLetter(char c, const Character *chars, int no_chars) for(f=0; f < no_chars; f++) { - if (chars[f].is_letter && chars[f].letter == c) + if (chars[f].type == eLetter && chars[f].letter == c) { return 1; } @@ -82,7 +89,7 @@ static int CheckLettersAndLength(const char *buff, for(f=0; f < no_chars; f++) { - if (chars[f].is_letter && + if (chars[f].type == eLetter && (chars[f].letter != buff[f])) { return 0; @@ -100,7 +107,7 @@ static int CheckNumbers(const char *buff, const Character *chars, int no_chars) for(f = 0; f < no_chars; f++) { - if (!chars[f].is_letter) + if (chars[f].type == eNumber) { int i = chars[f].number - 1; @@ -139,7 +146,8 @@ int main(int argc, char *argv[]) if (argc < 3) { - fprintf(stderr, "usage: %s wordlist ...\n", argv[0]); + fprintf(stderr, "usage: %s wordlist ...\n", + argv[0]); exit(EXIT_FAILURE); } @@ -159,13 +167,18 @@ int main(int argc, char *argv[]) if (i < 1 || i > 27) { - chars[f].is_letter = 1; + chars[f].type = eLetter; chars[f].letter = tolower((unsigned char)argv[f+2][0]); chars[f].number = 0; + + if (chars[f].letter == '.') + { + chars[f].type = eMissing; + } } else { - chars[f].is_letter = 0; + chars[f].type = eNumber; chars[f].number = i; chars[f].letter = 0; } -- cgit v1.2.3