Задать вопрос
@ffff567

Можно ли что нибудь оптимизировать в коде функции поиска?

На данный момент лучший в мире решатель для угадывания слов в таких играх как виселица, ПолеЧудес. После тестов еще доделаю статитистику для слов когда ведущий не говорит в каких местах буквы находятся.
6810059c1805c091028201.jpeg
https://rutube.ru/video/4367bfea32c91158da64767c99...
def search():
    буквы=set("абвгдежзийклмнопрстуфхцчьъышщэюя")
    тексты_виджетов = {widget.get("1.0", tk.END).strip() for widget in text_widgets}
    буквы.difference_update(set(мусор.get())|тексты_виджетов)
    буквы2=''.join(буквы)
    gg=""
    pp=0
    for widget in text_widgets:
        jj=widget.get("1.0", tk.END)[:-1]
        if jj:
            if pp:
                gg+="[" + буквы2 + "]{"+f"{pp}"+"}"
                pp=0
            gg+=jj
        else:
            pp+=1
    else: 
        if pp: gg+="[" + буквы2 + "]{"+f"{pp}"+"}$"
        else: gg+="$" 
    в_слове=dict(Counter(есть.get()))
    for i in в_слове: 
        pj=f".*{i}"
        gg=f"(?={pj*в_слове[i]})"+gg
    gg="^"+gg
    все_слова = [word for word in слова if len(word)==длина and re.findall(gg, word)]
    сет={}
    for буква in буквы:
        счет={}
        for слово in все_слова:
            if буква in слово:
                ff=tuple([index for index, char in enumerate(слово) if char == буква])
                счет[ff] = счет.get(ff, 0) + 1
        общее=счет.values()
        if общее:
            сумма=sum(общее)
            сет[буква]=[сумма-(max(общее)*min(общее)), сумма, len(общее)]
    for i in в_слове:
        if i in сет: del сет[i]
    for area in [text_area, text_area2, text_area3]: 
        area.delete("1.0", tk.END)
    text_area.insert(tk.END, f"Букв: {len(сет.keys())} Cлов: {len(все_слова)}\n" + "\n".join(все_слова))
    insert_colored_text(text_area2, "Для слов ≥ 7\n")
    insert_colored_text(text_area3, "Для слов ≤ 6\n")
    for номер, area in enumerate([text_area2, text_area3, text_area4]):
        for key, value in sorted(сет.items(), key=lambda x: x[1][номер], reverse=True):
            area.insert(tk.END, f"{key.upper()} = {value[номер]}\n")
    for i in "абвгдежзийклмнопрстуфхцчьъышщэюя":
        if i in сет: 
            буквы_сл[i].config(bg="white", fg="black")
        else: 
            буквы_сл[i].config(bg="#eee5e5", fg="#f0f0f0")
  • Вопрос задан
  • 26 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Хочешь помощи, пиши нормальный код, почитай про pep8, а то на твой код без боли нельзя смотреть.

Ну и учись самостоятельно оптимизировать, начни с профилирования для поиска тяжелый мест. Хочешь помощи именно по алгоритмы, так сформулируй проблемное место.

лучший в мире решатель
зачем выдумывать такое?

зачем нам нужна ссылка на видео?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы