寻找唯一解谜题 python

Finding unique solution puzzle python

x = np.array([[0,1,11],[0,2,11],[0,3,10],[0,4,10],[0,5,9],[0,6,9],[1,7,9],
              [1,5,11],[1,6,11],[2,7,11],[2,8,10]])

我对此很陌生,所以我要这样称呼 [element1,element2,element3]

我有一个如上所示的数组,我想找到这个数组的解决方案。 它应该满足以下条件:

第0个元素:

它应该至少有一个来自 [0,1,11],[0,2,11],[0,3,10],[0,4,10],[0,5,9],[0,6,9]

的解决方案

第一个元素1:

这个:[1,7,9],[1,5,11],[1,6,11]

第2个元素:

还有这个:[2,7,11],[2,8,10]

使得每个解的第二个元素和第三个元素都是唯一的(其中第一个元素=0,第二个元素=1,第三个元素=2)

o/p 可以是: [0,1,11][1,7,9][2,8,10]

错误的输出: [0,1,11], [1,6,11] ,[2,8,10] 这里第一个和第二个参数3相同

如果我没理解错的话,您想从给定的 x 数组中生成三元组,以便第一个、第二个和第三个元素在一个三元组中都是唯一的。执行此操作的代码:

import itertools

x = [[0,1,11],[0,2,11],[0,3,10],[0,4,10],[0,5,9],[0,6,9],[1,7,9],
              [1,5,11],[1,6,11],[2,7,11],[2,8,10]]
triplets = itertools.combinations(x,3)
for t in triplets:
  isGood = True
  for pos in range(3):
    if (t[0][pos] == t[1][pos] or t[0][pos] == t[2][pos] or t[1][pos] == t[2][pos]):
      isGood = False
  if (isGood):
    print(repr(t))

这会产生以下输出:

([0, 1, 11], [1, 7, 9], [2, 8, 10])
([0, 2, 11], [1, 7, 9], [2, 8, 10])
([0, 5, 9], [1, 6, 11], [2, 8, 10])
([0, 6, 9], [1, 5, 11], [2, 8, 10])

一个更 pythonic 的解决方案,只用 3 行就可以完成同样的工作

for t in itertools.combinations(x,3):
  if all(len(col) == len(set(col)) for col in zip(*t)):
    print(repr(t))

疯狂的单线:

print(''.join(repr(t) + '\n' for t in itertools.combinations(x,3) if all(len(col) == len(set(col)) for col in zip(*t))))