From cb1fe15cae2a4a236bc2270994f6e75189d9bcf1 Mon Sep 17 00:00:00 2001 From: Alvie Rahman Date: Wed, 30 Aug 2023 13:01:19 +0100 Subject: [PATCH] have separate list for possible answers, possible inputs, clean up code, add verb modifiers to allowed types list --- Makefile | 5 +++-- allowed_types | 1 + game.js | 4 ++-- scripts/gen_wordlist.py | 27 +++++++++++++++------------ 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 001523c..e22c606 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,13 @@ WORD_LENGTH=5 -MIN_FREQUENCY=1 +VALID_ANSWER_FREQ_MIN=10 +VALID_INPUT_FREQ_MIN=1 SOURCE_WORDLIST=1_1_all_fullalpha.txt ALLOWED_TYPELIST=allowed_types all: wordlist.js .SUBMODULES wordlist.js: - ./scripts/gen_wordlist.py ${SOURCE_WORDLIST} ${WORD_LENGTH} ${MIN_FREQUENCY} ${ALLOWED_TYPELIST} > wordlist.js + ./scripts/gen_wordlist.py ${SOURCE_WORDLIST} ${WORD_LENGTH} ${VALID_ANSWER_FREQ_MIN} ${VALID_INPUT_FREQ_MIN} ${ALLOWED_TYPELIST} > wordlist.js clean: rm -rf wordlist.js diff --git a/allowed_types b/allowed_types index 4a5eae9..301bacb 100644 --- a/allowed_types +++ b/allowed_types @@ -7,4 +7,5 @@ verb pron conj noc +vmod @ diff --git a/game.js b/game.js index acbdc28..5589891 100644 --- a/game.js +++ b/game.js @@ -1,7 +1,7 @@ // global constants const gridWidth = 5 const gridHeight = 6 -const word = wordlist[Math.floor(Math.random()*wordlist.length)]; +const word = wordlist.valid_answers[Math.floor(Math.random()*wordlist.valid_answers.length)]; // global state variables var gameCompleted = null @@ -42,7 +42,7 @@ function checkGridRow() { getGridRow(row).items.forEach(item => rowWord += item.letter) console.log(rowWord) - if (!wordlist.includes(rowWord)) { + if (!wordlist.valid_inputs.includes(rowWord)) { body.classList.add("incorrect") setTimeout( () => body.classList.remove("incorrect"), 500) return diff --git a/scripts/gen_wordlist.py b/scripts/gen_wordlist.py index 6708cc6..f1ac363 100755 --- a/scripts/gen_wordlist.py +++ b/scripts/gen_wordlist.py @@ -9,11 +9,11 @@ class WordListItem: self.word = word[1] if word[1].isalpha() else word[3] self.pos = word[2] - self.frequency = int(word[4]) + self.freq = int(word[4]) def __repr__(self): - return f"" + return f"" def get_args(): @@ -23,7 +23,8 @@ def get_args(): parser = argparse.ArgumentParser() parser.add_argument('wordlist') parser.add_argument('word_length', type=int) - parser.add_argument('frequency_min', type=int) + parser.add_argument('valid_answer_freq_min', type=int) + parser.add_argument('valid_input_freq_min', type=int) parser.add_argument('allowedtypelist') return parser.parse_args() @@ -36,22 +37,24 @@ def main(args): types = set() with open(args.wordlist) as fp: - words = [ WordListItem(line) for line in fp.read().strip().lower().split('\n') ] + src_words = [ WordListItem(line) for line in fp.read().strip().lower().split('\n') ] - [ types.add(word.pos) for word in words ] + src_words = [ word for word in src_words if word.word.isalpha() ] + src_words = [ word for word in src_words if len(word.word) == args.word_length ] + src_words = [ word for word in src_words if word.pos in allowed_types ] - words = [ word.word for word in words if word.frequency >= args.frequency_min and word.word.isalpha() and len(word.word) == args.word_length and word.pos in allowed_types ] + [ types.add(word.pos) for word in src_words ] + + words = {} + words['valid_answers'] = [ w.word for w in src_words if w.freq >= args.valid_answer_freq_min ] + words['valid_inputs'] = [ w.word for w in src_words if w.freq >= args.valid_input_freq_min ] - words.sort() # remove duplicates - words = list(set(words)) print(f"wordlist = {json.dumps(words)}") print(f"{args=}", file=sys.stderr) - print(f"{len(words)=}", file=sys.stderr) + print(f"{len(words['valid_answers'])=}", file=sys.stderr) + print(f"{len(words['valid_inputs'])=}", file=sys.stderr) print(f"{types=}", file=sys.stderr) - print(f"{'cares' in words=}", file=sys.stderr) - print(f"{'ideas' in words=}", file=sys.stderr) - print(f"{'prose' in words=}", file=sys.stderr) return 0