寻找独特的解决方案拼图python

时间:2015-12-20 14:00:16

标签: python python-2.7 puzzle 8-puzzle

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是相同的。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望从给定的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))))