You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.5 KiB

  1. #!/usr/bin/python
  2. import re
  3. import itertools
  4. from spellchecker import SpellChecker
  5. SPELL = SpellChecker()
  6. SPELL.word_frequency.load_text_file('extra_words.txt')
  7. def canidates(letters, min=2):
  8. pos = []
  9. for length in range(min, len(letters)+1):
  10. for comb in itertools.combinations(letters, length):
  11. for perm in itertools.permutations(comb):
  12. word = ''.join(perm)
  13. pos.append(word)
  14. return set(SPELL.known(pos))
  15. def filter_pos(pos, regex):
  16. pat = re.compile(regex + '$')
  17. return set(filter(pat.match, pos))
  18. if __name__ == "__main__":
  19. while True:
  20. letters = input('Enter letters: ')
  21. if letters == ":quit:":
  22. break
  23. pos = canidates(letters)
  24. inp = None
  25. guessed = set()
  26. while inp not in (":quit:", ":new:"):
  27. if inp == ":enter:":
  28. inp = None
  29. while inp != ":done:":
  30. if inp is not None:
  31. guessed.add(inp)
  32. inp = input("Enter guessed word, :done: to exit: ")
  33. elif inp is not None:
  34. fpos = filter_pos(pos, inp)
  35. for word in fpos-guessed:
  36. print('>>>', word)
  37. print('Letters: ', ','.join(letters))
  38. prompt = """\
  39. Enter pattern,
  40. ':new:' for new letters,
  41. ':enter:' to fill in guessed words, or
  42. ':quit:' to exit: """
  43. inp = input(prompt)
  44. if inp == ":quit:":
  45. break