Skip to content

Instantly share code, notes, and snippets.

@olologin
Created December 20, 2023 08:16
Show Gist options
  • Save olologin/6e02353f9dea0a91555c39c6d29f2a53 to your computer and use it in GitHub Desktop.
Save olologin/6e02353f9dea0a91555c39c6d29f2a53 to your computer and use it in GitHub Desktop.
Скрипт для перебора существительных размером 5 букв для решения новогодней загадки от тиньков банка
# забаненые буквы которых в слове быть не должно
banned_letters = [*'кадрети']
# буквы которые в слове быть должны, но не на этих позициях (первая позиция это 0-й индекс)
banned_positions = {'с':[2, 3, 4], 'в':[1]}
# путь к словарю существительных русского (берётся например отсюда https://github.com/Harrix/Russian-Nouns/blob/main/dist/russian_nouns.txt)
dict_path = 'russian_nouns.txt'
words = []
with open(dict_path, encoding='utf-8') as f:
for word in f.readlines():
words.append(word.lower().replace('\r', '').replace('\n', ''))
def is_fitting_word(word):
if len(word) != 5:
return False
for letter in banned_letters:
if letter in word:
return False
for letter, banned in banned_positions.items():
if letter not in word:
return False
for pos in banned:
if word[pos] == letter:
return False
return True
for word in filter(is_fitting_word, words):
print(word)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment