@valis

Где найти задачи по упрощению логических выражений?

Ну в общем сабж - нужно развить скилы по упрощению логических выражений и пытаюсь найти задачник где были бы примеры решений, задачи и ответы на задачи (по примеру М.И. Сканави) но только по булевой алгебре.
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ответы на вопрос 1
longclaps
@longclaps
Скилы по упрощению логических выражений пусть лучше лошадь развивает, у неё голова большая )))
Но раз уж тебе так приспичило - вот тренажер:

from random import choice

def scheme(n, m):
    """
    :param n: число входных аргументов, не более 26 (a..z)
    :param m: число логических операций, фигачь сколько влезет
    :return: строка с логическим выражением для упрощения
    """
    l, s = list('abcdefghijklmnopqrstuvwxyz'[:n]), ''
    while s.count('(') < m:
        op = choice(('not', 'and', 'or', '^'))
        s = f'(not {choice(l)})' if op == 'not' else f'({choice(l)} {op} {choice(l)})'
        l.append(s)
    return s

print(scheme(5, 10))

Вот проверялка, никакой обработки ошибок, всё по хардкору - извини:

import re
from itertools import product

def check(task, solution):
    """
    :param task: строка задачи
    :param solution: строка решения
    :return: эквивалентны ли они (bool)
    """
    args = sorted(set(re.findall(r'\b[a-z]\b', task)))
    chk = compile(f'({task})==({solution})', '<string>', 'eval')
    return all(eval(chk, {}, dict(zip(args, bulls)))
               for bulls in product((False, True), repeat=len(args)))

print(check('a and (b or not b)', 'a'))
print(check('a and (b or not b)', 'a ^ b'))

Не забудь рассказать об успехах.
Ответ написан
Ваш ответ на вопрос

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

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