Initial commit
This commit is contained in:
commit
a9b21ec33f
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.idea
|
||||
__pycache__
|
||||
venv
|
40
guess.py
Normal file
40
guess.py
Normal file
@ -0,0 +1,40 @@
|
||||
import os
|
||||
from collections import Counter
|
||||
|
||||
from play import MOVE_SEP, BLANK
|
||||
|
||||
|
||||
def main():
|
||||
hint = input("hint >")
|
||||
no_letters = input('no >')
|
||||
hint = hint.lower().replace(' ', '')
|
||||
regex = ''
|
||||
for char in hint:
|
||||
regex += '[{}]'.format(char)
|
||||
regex = regex.replace('[_]', '[[:alpha:]]')
|
||||
command = "grep -Ei '^{}$' /usr/share/dict/bulgarian".format(regex)
|
||||
if no_letters:
|
||||
command += " | grep -Eiv '{}'".format('|'.join(no_letters))
|
||||
print(MOVE_SEP)
|
||||
print(command)
|
||||
print(MOVE_SEP)
|
||||
words = os.popen(command).read().split('\n')[:-1]
|
||||
print("{} words".format(len(words)))
|
||||
print(MOVE_SEP)
|
||||
characters = Counter()
|
||||
for word in words:
|
||||
word = word.lower()
|
||||
word_chars = set(word)
|
||||
characters += Counter(list(word_chars))
|
||||
for char in hint:
|
||||
if char not in [BLANK]:
|
||||
del characters[char]
|
||||
if len(words) < 100:
|
||||
for word in words:
|
||||
print(word)
|
||||
print(MOVE_SEP)
|
||||
print(characters.most_common())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
65
play.py
Normal file
65
play.py
Normal file
@ -0,0 +1,65 @@
|
||||
bg_alphabet = "абвгдежзийклмнопрстуфхцчшщъьюя"
|
||||
|
||||
BLANK = '_'
|
||||
MOVE_SEP = '.................................'
|
||||
|
||||
WIN_MESSAGE = "WIN"
|
||||
LOSS_MESSAGE = "LOSE"
|
||||
|
||||
HANG_STAGES = [[],
|
||||
["|"],
|
||||
["Г"],
|
||||
["Го"],
|
||||
["Го", " |"],
|
||||
["Го", "/|"],
|
||||
["Го", "/|\\"],
|
||||
["Го", "/|\\", "/"],
|
||||
["Го", "/|\\", "/ \\"],
|
||||
]
|
||||
|
||||
|
||||
def generate_hint(word, guesses):
|
||||
is_win = True
|
||||
reveals = []
|
||||
for pos, character in enumerate(word):
|
||||
if pos == 0 or pos == len(word) - 1:
|
||||
reveals += character
|
||||
elif character in guesses:
|
||||
reveals += character
|
||||
else:
|
||||
is_win = False
|
||||
reveals += BLANK
|
||||
return ' '.join(reveals).upper(), is_win
|
||||
|
||||
|
||||
def print_state(state):
|
||||
for line in HANG_STAGES[state]:
|
||||
print(line)
|
||||
|
||||
|
||||
def main():
|
||||
word = input("word >")
|
||||
guesses = set()
|
||||
state = 0
|
||||
while True:
|
||||
hint, is_win = generate_hint(word, guesses)
|
||||
print(hint)
|
||||
print_state(state)
|
||||
if is_win:
|
||||
print(WIN_MESSAGE)
|
||||
break
|
||||
while True:
|
||||
guess = input("guess >")
|
||||
if guess in bg_alphabet:
|
||||
break
|
||||
if guess not in word and guess not in guesses:
|
||||
state += 1
|
||||
if state > len(HANG_STAGES):
|
||||
print(LOSS_MESSAGE)
|
||||
break
|
||||
guesses.add(guess)
|
||||
print(MOVE_SEP)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user