何年にもわたって、私はテクノロジーの解決法を追跡しており、特定のパズル、つまり「交差するはしご」にそれらを適用することについてのブログ投稿を維持しています。
要点を言えば、たまたま z3 のことを知り、それを具体的な問題に当てはめてみました。私は Python バインディングを使用して、次のように書きました。
$ cat laddersZ3.py
#!/usr/bin/env python
from z3 import *
a = Int('a')
b = Int('b')
c = Int('c')
d = Int('d')
e = Int('e')
f = Int('f')
solve(
a>0, a<200,
b>0, b<200,
c>0, c<200,
d>0, d<200,
e>0, e<200,
f>0, f<200,
(e+f)**2 + d**2 == 119**2,
(e+f)**2 + c**2 == 70**2,
e**2 + 30**2 == a**2,
f**2 + 30**2 == b**2,
a*d == 119*30,
b*c == 70*30,
a*f - 119*e + a*e == 0,
b*e - 70*f + b*f == 0,
d*e == c*f)
残念ながら、z3 レポート...
$ python laddersZ3.py
failed to solve
この問題には、少なくとも次の整数解があります: a=34、b=50、c=42、d=105、e=16、f=40。
私は何か間違ったことをしていますか、それともこの種の連立方程式/範囲制約は z3 が解決できる範囲を超えていますか?
助けてくれてありがとう。
更新、5年後:Z3はこれをすぐに解決できるようになりました。