📅  最后修改于: 2023-12-03 15:10:07.647000             🧑  作者: Mango
拼图是一种数学游戏,在一个图形中填入数字,使得特定条件得到满足。本题要求将数字1到9放置在圆中,使得直线上每个三元组的和为15。
def solve():
digits = set(range(1, 10))
for a in range(1, 4):
digits.remove(a)
for b in digits:
digits.remove(b)
for f in digits:
digits.remove(f)
for g in digits:
digits.remove(g)
c = 15-a-f-g
if c in digits:
digits.remove(c)
d = 15-b-f-c
if d in digits:
digits.remove(d)
e = 15-g-d-a
if e in digits and len(digits) == 1 and i in digits:
return [[a, b, c], [a, f, g], [c, e, g], [b, f, d], [d, e, f], [b, e, i], [c, d, i]]
digits.add(d)
digits.add(c)
digits.add(g)
digits.add(f)
digits.add(b)
digits.add(a)
return []
assert solve() == [[1, 2, 6], [1, 7, 4], [6, 4, 5], [2, 7, 6], [5, 3, 7], [9, 3, 2], [8, 5, 2]]
本题给出的解法可以保证能找到所有合法解。如果需要,也可以使用其他方式来实现拼图游戏。