首页 > 解决方案 > 大型布尔表达式的替换

问题描述

假设我有一些给定的布尔函数,

   b0 = a0*a1*a2 +  !a1*a3
   b1 = a4*!a5*a6 + !a4*!a7 + a5*a7
   b2 = a8*!a9 + a9*!a10*!a11
   b3 = !a0*!a4*a8 + a0*!a10

   c0 = b0*b1*b2 + !b1*b3
   c1 = b1*!b0*b3 + !b1*!b3 + b0*b2
   c2 = b1*!b3 + b2*!b0*!b1
   c3 = !b0*!b2*b3 + b1*!b3

是否有任何工具或 python 脚本可以从第一组扩展第二组表达式。表示我想用 A0, .. A11 来表达 C0,C1,C2,C3

标签: boolean

解决方案


对于您的特定示例,一个非常天真的 Python 解决方案是

expressions = {
    'b0': 'a0*a1*a2 + !a1*a3',
    'b1': 'a4*!a5*a6 + !a4*!a7 + a5*a7',
    'b2': 'a8*!a9 + a9*!a10*!a11',
    'b3': '!a0*!a4*a8 + a0*!a10'
}

def expand(expression: str) -> str:
    result = expression
    for key, value in expressions.items():
        result = result.replace(key, f"({value})")
    return result

使用正则表达式可以更好地实现这一点。


推荐阅读