将列表格式化为3SAT表格

时间:2017-06-15 00:13:37

标签: python formatting sat

离python有一段时间了,所以格式化技巧不存在。希望改变这种格式:

[[8, -6, -4], [-10, 4, 6], [6, -8, -9]] 

看起来像这样:

(x8 v ~x6 v ~x4) ^ (~x10 v x4 v x6) ^ (x6 v ~x8 v ~x9)

然后能够将每个数字作为单独的输入引用,以便更改为T或F.任何指导都将得到赞赏。

import random
def sample():
    nums = random.sample(range(-10, 10), 3)
    return nums

exlist = []
boundary = random.randint(3, 10)
count = 0
while (count < boundary):
    count = count + 1
    exlist.append(sample()) 

1 个答案:

答案 0 :(得分:1)

请注意,在你的情况下0情况似乎是退化的,所以我假设你没有0(否则会变成x0或~x0?)

假设您将T / F存储在如下列表中:

 exvalues = [bool(random.randint(0,1)) for _ in range(10)]

然后您可以简单地评估这样的表达式(无需生成您所追求的符号表达式):

all(any(exvalues[x] if x>0 else not exvalues[-x] for x in y) for y in exlist)

说明:您获取所有&#34;子表达式&#34;的全局and,并且每个子表达式是元素的全局or(可选{{1}取决于标志)。