เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด”เดชเดšเดพเดฐเดฟเด• เดชเดฐเดฟเดถเต‹เดงเดจ

เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เด‡เตปเดฑเตผเดจเต†เดฑเตเดฑเดฟเดจเตเดฑเต† เดฑเดทเตเดฏเตป เดญเดพเดทเดพ เดฎเต‡เด–เดฒเดฏเดฟเตฝ, เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดทเดฏเด‚ เดตเต‡เดฃเตเดŸเดคเตเดฐ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเดฟเดฒเตเดฒ, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เดฒเดณเดฟเดคเดตเตเด‚ เดตเตเดฏเด•เตเดคเดตเตเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเดŸเต† เด…เดญเดพเดตเดฎเตเดฃเตเดŸเต.

เด’เดฐเต เดตเดฟเดฆเต‡เดถ เดธเตเดฐเต‹เดคเดธเตเดธเดฟเตฝ เดจเดฟเดจเตเดจเต เดžเดพเตป เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเตฝเด•เตเด‚, เด’เดชเตเดชเด‚ เดจเดฆเดฟเดฏเตเดŸเต† เดฎเดฑเตเด•เดฐเดฏเดฟเดฒเต‡เด•เตเด•เต เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดŽเดจเตเดจเดฟเดต เด•เดŸเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจ เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเต เดŽเดจเตเดฑเต† เดธเตเดตเดจเตเดคเด‚ เดชเดฐเดฟเดนเดพเดฐเด‚ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดŽเดจเตเดจเดพเตฝ เด†เดฆเตเดฏเด‚, เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเตเด‚ เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด…เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเตเด‚ เดžเดพเตป เดšเตเดฐเตเด•เตเด•เดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚.

เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดฑเตเดฑเตŠเดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดพเดฃเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต.

เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดท เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเดจเตเด‚ เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เด•เต‡เดŸเตเดชเดพเดŸเตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดถเด•เตเดคเดฎเดพเดฏ เดฎเดพเตผเด—เดฎเดพเดฃเต เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚: เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเตฝ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดฆเตเดตเดพเดฐเด™เตเด™เดณเตเด‚ เดฌเด—เตเด•เดณเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเต‹ เด…เดต เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเต†เดจเตเดจเต เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เดพเดจเต‹ เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.
8 เดธเตเด•เตเดตเดฏเดฑเตเด•เดณเตเดณเตเดณ เดฌเต‹เตผเดกเต เดตเต€เดคเดฟเดฏเตเดณเตเดณ 1000 เดฐเดพเดœเตเดžเดฟเด•เดณเตเดŸเต† เดชเตเดฐเดถเตเดจเด‚ เดชเต‹เดฒเต† เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เด‡เดคเต เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต: เด‡เดคเต†เดฒเตเดฒเดพเด‚ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเดฟเดฒเต‡เด•เตเด•เต‹ เดจเดฟเตผเดคเตเดคเตเดจเตเดจ เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต‹ เดตเดฐเตเดจเตเดจเต.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดเดคเต เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚, เดฎเต‚เดจเตเดจเต เด‰เดคเตเดคเดฐเด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเต เดฒเดญเดฟเด•เตเด•เตเด‚: เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดถเดฐเดฟเดฏเดพเดฃเต, เดคเต†เดฑเตเดฑเดพเดฃเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‰เดคเตเดคเดฐเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ.

เด‰เดคเตเดคเดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเต เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดญเดพเด—เด™เตเด™เตพ เดชเตเดจเตผเดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดตเดฏเตเดŸเต† เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด•เตเดฑเดฏเตเด•เตเด•เดพเดจเตเด‚, เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด…เดคเต† เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด‡เดฒเตเดฒ เดŽเดจเตเดจ เด‰เดคเตเดคเดฐเด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฃเต.

เด•เต‚เดŸเดพเดคเต† เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดตเดฟเตปเดกเต‹เดธเต เด•เต‡เตผเดฃเดฒเดฟเดฒเตเด‚ เดกเดพเตผเดช เดกเตเดฐเต‹เตบ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเดฒเตเด‚, เดชเดฐเดฎเดพเดตเดงเดฟ เดชเดฐเดฟเดฐเด•เตเดท เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป.

เดฏเดพเดจเตเดคเตเดฐเดฟเด• เดธเดฟเดฆเตเดงเดพเดจเตเดคเด‚ เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดธเดฎเดตเดพเด•เตเดฏเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดตเดณเดฐเต† เดถเด•เตเดคเดฎเดพเดฏ เด‰เดชเด•เดฐเดฃเดฎเดพเดฏ Z3Prover เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚.

เด•เต‚เดŸเดพเดคเต†, Z3 เดธเดฎเดตเดพเด•เตเดฏเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เดฌเตเดฐเต‚เดŸเตเดŸเต เดซเต‹เดดเตโ€Œเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดตเดฏเตเดŸเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.
เด‡เตปเดชเตเดŸเตเดŸเต เด“เดชเตเดทเดจเตเด•เดณเตเดŸเต† 10^100 เด•เต‹เดฎเตเดชเดฟเดจเต‡เดทเดจเตเด•เตพ เด‰เดณเตเดณ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เดชเต‹เดฒเตเด‚ เด‡เดคเดฟเดจเต เด‰เดคเตเดคเดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเดพเดฃเต เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚.

เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด‡เดจเตเดฑเดฟเดœเดฑเดฟเดจเตเดฑเต† เด’เดฐเต เดกเดธเตป เด‡เตปเดชเตเดŸเตเดŸเต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต, เด‡เดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดจเต‡เดฐเดฟเดŸเดพเดฑเตเดฃเตเดŸเต.

8 เดฐเดพเดœเตเดžเดฟเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด‚ (เด‡เด‚เด—เตเดฒเต€เดทเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดŸเตเดคเตเดคเดคเต เดฎเดพเดจเตเดตเตฝ).

เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด”เดชเดšเดพเดฐเดฟเด• เดชเดฐเดฟเดถเต‹เดงเดจ

# We know each queen must be in a different row.
# So, we represent each queen by a single integer: the column position
Q = [ Int('Q_%i' % (i + 1)) for i in range(8) ]

# Each queen is in a column {1, ... 8 }
val_c = [ And(1 <= Q[i], Q[i] <= 8) for i in range(8) ]

# At most one queen per column
col_c = [ Distinct(Q) ]

# Diagonal constraint
diag_c = [ If(i == j,
              True,
              And(Q[i] - Q[j] != i - j, Q[i] - Q[j] != j - i))
           for i in range(8) for j in range(i) ]

solve(val_c + col_c + diag_c)

Z3 เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดนเดพเดฐเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚:

[Q_5 = 1,
 Q_8 = 7,
 Q_3 = 8,
 Q_2 = 2,
 Q_6 = 3,
 Q_4 = 6,
 Q_7 = 5,
 Q_1 = 4]

8 เดฐเดพเดœเตเดžเดฟเด•เดณเตเดŸเต† เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเตเด•เตพ เด‡เตปเดชเตเดŸเตเดŸเดพเดฏเดฟ เดŽเดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดฐเดพเดœเตเดžเดฟเด•เตพ เดชเดฐเดธเตเดชเดฐเด‚ เดคเต‹เตฝเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต‹ เดŽเดจเตเดจ เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจเดคเดพเดฃเต เดฐเดพเดœเตเดžเดฟ เดชเตเดฐเดถเตเดจเด‚.

เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดชเตเดฐเดถเตโ€Œเดจเดตเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดฎเตเดชเต‹เตพ, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต‹เดกเต เด’เดฐเต เดธเดฎเดตเดพเด•เตเดฏเดฎเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเตเดจเตเดจ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดšเตเดตเดŸเต เด•เต‚เดŸเดฟ เดŽเดŸเตเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต: เด‡เดคเต เดจเดฎเตเดฎเตเดŸเต‡เดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเด‚ ( เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ).

เด•เต‡เดŸเตเดชเดพเดŸเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจ เด•เดพเดฐเตเดฏเดคเตเดคเดฟเดฒเตเด‚ เดเดคเดพเดฃเตเดŸเต เด‡เดคเตเดคเดจเตเดจเต† เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚: เดžเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เดตเตเดฏเดตเดธเตเดฅเด•เตพ เดžเด™เตเด™เตพ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด…เดกเตเดฎเดฟเตป เดชเดพเดธเตโ€Œเดตเต‡เดกเต, เด‰เดฑเดตเดฟเดŸเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดกเต€เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เดกเต เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดธเดฎเดตเดพเด•เตเดฏเด™เตเด™เดณเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเตเด•, เดคเตเดŸเตผเดจเตเดจเต เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเดคเดฟเดจเต เด‰เดคเตเดคเดฐเด‚ เดจเต‡เดŸเตเด•. เดฒเด•เตเดทเตเดฏเด‚ เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดจเต เด‡เตปเดชเตเดŸเตเดŸเดพเดฏเดฟ เดกเดพเดฑเตเดฑ เดจเตฝเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด‚ เด•เต‚เดŸเตเดคเตฝ เดฐเดธเด•เดฐเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฐเดตเดงเดฟ (7) เด˜เดŸเตเดŸเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เด’เดฐเตŠเดฑเตเดฑ GET เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ POST เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดคเตเดณเดšเตเดšเตเด•เดฏเดฑเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดธเดพเดนเดšเดฐเตเดฏเดตเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจเดคเดพเดฃเต‹ เดฐเดพเดœเตเดžเดฟเดฏเตเดŸเต† เดชเตเดฐเดถเตเดจเด‚ เดŽเด™เตเด•เดฟเตฝ, เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดŽเดจเตเดจเดฟเดต เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดตเตเด‚ เดตเตเดฏเดพเดชเด•เดตเตเดฎเดพเดฏ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตฝ เดฒเด•เตเดทเตเดฏเด‚ เดจเต‡เดŸเดพเดจเดพเด•เตเด‚. เดจเดฟเดฐเดตเดงเดฟ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดตเดดเดฟ.

เด‡เดคเต เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจเดคเดพเดฃเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด’เดฐเต SQL เด•เตเดคเตเดคเดฟเดตเดฏเตเดชเตเดชเต เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เด…เดคเดฟเดฒเต‚เดŸเต† เด’เดฐเต เดซเดฏเตฝ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดคเตเดŸเตผเดจเตเดจเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดตเด•เดพเดถเด™เตเด™เตพ เด‰เดฏเตผเดคเตเดคเตเด•เดฏเตเด‚ เดคเตเดŸเตผเดจเตเดจเต เด’เดฐเต เดชเดพเดธเตเดตเต‡เดกเต เดจเต‡เดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเดตเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเด‚.

เดชเตเดฐเดถเตเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดชเดฐเดฟเดนเดพเดฐเดตเตเด‚เด•เตผเดทเด•เดจเต เด’เดฐเต เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดŽเดจเตเดจเดฟเดต เดจเดฆเดฟเด•เตเด•เต เด•เตเดฑเตเด•เต† เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด•เตผเดทเด•เดจเต เดชเตเดฑเดฎเต† เด’เดฐเต เดตเดธเตเดคเตเดตเดฟเดจเต† เดฎเดพเดคเตเดฐเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เด•เตผเดทเด•เดจเตเดฃเตเดŸเต. เด•เตผเดทเด•เตป เด…เดตเดฐเต† เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเดคเต† เดตเดฟเดŸเตเดŸเดพเตฝ เดšเต†เดจเตเดจเดพเดฏ เด†เดŸเดฟเดจเต†เดฏเตเด‚ เด†เดŸเต เด•เดพเดฌเต‡เดœเดฟเดจเต†เดฏเตเด‚ เดคเดฟเดจเตเดจเตเด‚.

4-เดพเด‚ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เด•เตผเดทเด•เตป เด†เดŸเดฟเดจเต† เดคเดฟเดฐเดฟเด•เต† เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เต‡เดฃเตเดŸเดฟ เดตเดฐเตเด‚ เดŽเดจเตเดจเดคเดพเดฃเต เดชเดฐเดฟเดนเดพเดฐเด‚.
เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เด…เดคเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดพเดฑเตเดฑเดฟเด•เต เด†เดฏเดฟ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดพเด‚.

เด•เตผเดทเด•เตป, เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดŽเดจเตเดจเดฟเดตเดฏเต† 4 เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ 0 เดฎเต‚เดฒเตเดฏเด‚ เดฎเดพเดคเตเดฐเด‚ เดŽเดŸเตเด•เตเด•เตเดจเตเดจ 1 เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเดพเดฏเดฟ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚. เดชเต‚เดœเตเดฏเด‚ เดŽเดจเตเดจเดพเตฝ เด‡เดŸเดคเตเด•เดฐเดฏเดฟเดฒเดพเดฃเต†เดจเตเดจเตเด‚ เด’เดจเตเดจเต เดตเดฒเดคเตเดตเดถเดคเตเดคเดพเดฃเต†เดจเตเดจเตเด‚ เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต.

import json
from z3 import *
s = Solver()
Num= 8

Human = [ Int('Human_%i' % (i + 1)) for i in range(Num) ]
Wolf = [ Int('Wolf_%i' % (i + 1)) for i in range(Num) ]
Goat = [ Int('Goat_%i' % (i + 1)) for i in range(Num) ]
Cabbage = [ Int('Cabbage_%i' % (i + 1)) for i in range(Num) ]

# Each creature can be only on left (0) or right side (1) on every state
HumanSide = [ Or(Human[i] == 0, Human[i] == 1) for i in range(Num) ]
WolfSide = [ Or(Wolf[i] == 0, Wolf[i] == 1) for i in range(Num) ]
GoatSide = [ Or(Goat[i] == 0, Goat[i] == 1) for i in range(Num) ]
CabbageSide = [ Or(Cabbage[i] == 0, Cabbage[i] == 1) for i in range(Num) ]
Side = HumanSide+WolfSide+GoatSide+CabbageSide

เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เด†เดตเดถเตเดฏเดฎเดพเดฏ เด˜เดŸเตเดŸเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเดฎเดพเดฃเต เดธเด‚เด–เตเดฏ. เด“เดฐเต‹ เด˜เดŸเตเดŸเดตเตเด‚ เดจเดฆเดฟเดฏเตเดŸเต†เดฏเตเด‚ เดฌเต‹เดŸเตเดŸเดฟเดจเตเดฑเต†เดฏเตเด‚ เดŽเดฒเตเดฒเดพ เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เด…เดตเดธเตเดฅเดฏเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดชเตเดชเต‹เตพ, เดจเดฎเตเด•เตเด•เต เด‡เดคเต เด•เตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏเดฟ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเด‚, เด’เดฐเต เดฎเดพเตผเดœเดฟเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, 10 เดŽเดŸเตเด•เตเด•เตเด•.

เด“เดฐเต‹ เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเดฏเตเด‚ 10 เด•เต‹เดชเตเดชเดฟเด•เดณเดพเดฏเดฟ เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต - เด‡เดคเต เด“เดฐเต‹ 10 เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเดฒเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเดฎเดพเดฃเต.

เด‡เดจเดฟ เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดจเตเด‚ เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฎเตเดณเตเดณ เดตเตเดฏเดตเดธเตเดฅเด•เตพ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเด‚.

Start = [ Human[0] == 0, Wolf[0] == 0, Goat[0] == 0, Cabbage[0] == 0 ]
Finish = [ Human[9] == 1, Wolf[9] == 1, Goat[9] == 1, Cabbage[9] == 1 ]

เด…เดชเตเดชเต‹เตพ เดšเต†เดจเตเดจเดพเดฏ เด†เดŸเดฟเดจเต† เดคเดฟเดจเตเดจเตเดจเตเดจเดคเต‹ เด†เดŸเต เด•เดพเดฌเต‡เดœเต เดคเดฟเดจเตเดจเตเดจเตเดจเดคเต‹ เด†เดฏ เดตเตเดฏเดตเดธเตเดฅเด•เตพ เดธเดฎเดตเดพเด•เตเดฏเดคเตเดคเดฟเดฒเต† เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เดณเดพเดฏเดฟ เดžเด™เตเด™เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเต.
(เด’เดฐเต เด•เตผเดทเด•เดจเตเดฑเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดคเตเดคเดฟเตฝ, เด†เด•เตเดฐเดฎเดฃเด‚ เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต)

# Wolf cant stand with goat, and goat with cabbage without human. Not 2, not 0 which means that they are one the same side
Safe = [ And( Or(Wolf[i] != Goat[i], Wolf[i] == Human[i]), Or(Goat[i] != Cabbage[i], Goat[i] == Human[i])) for i in range(Num) ]

เด…เดตเดธเดพเดจเดฎเดพเดฏเดฟ, เด…เด™เตเด™เต‹เดŸเตเดŸเต‹ เดคเดฟเดฐเดฟเดšเตเดšเตเดชเต‹เด•เตเดฎเตเดชเต‹เดดเต‹ เด•เตผเดทเด•เดจเตเดฑเต† เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เดžเด™เตเด™เตพ เดจเดฟเตผเดตเตเดตเดšเดฟเด•เตเด•เตเด‚.
เด…เดฏเดพเตพเด•เตเด•เต เด’เดจเตเดจเตเด•เดฟเตฝ เด’เดฐเต เดšเต†เดจเตเดจเดพเดฏเดฏเต†เดฏเต‹ เด†เดŸเดฟเดจเต†เดฏเต‹ เด•เดพเดฌเต‡เดœเดฟเดจเต†เดฏเต‹ เด•เต‚เดŸเต† เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เดพเด‚, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด†เดฐเต†เดฏเตเด‚ เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เดฐเตเดคเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดŽเดตเดฟเดŸเต‡เดฏเตเด‚ เดฏเดพเดคเตเดฐ เดšเต†เดฏเตเดฏเดฐเตเดคเต.

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด•เตผเดทเด•เดจเดฟเดฒเตเดฒเดพเดคเต† เด†เตผเด•เตเด•เตเด‚ เด•เดŸเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เดจเดฆเดฟ, เดฌเต‹เดŸเตเดŸเต, เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด“เดฐเต‹ เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เด…เดตเดธเตเดฅเดฏเตเด‚ เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เตผเดถเดจเดฎเดพเดฏเดฟ เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เต‚ เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เด‡เดคเต เดชเตเดฐเด•เดŸเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.

2 เดฌเดฟเดฑเตเดฑเตเด•เดณเดฟเตฝ เด•เต‚เดŸเดฐเตเดคเต, เด•เต‚เดŸเดพเดคเต† เดฎเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดงเดฟเด•เดณเต‹เดŸเต†เดฏเตเด‚, เด•เตผเดทเด•เดจเต เด’เดฐเต เดธเดฎเดฏเดคเตเดคเต เด’เดฐเต เดธเตเดฅเดพเดชเดจเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เด•เตŠเดฃเตเดŸเตเดชเต‹เด•เดพเตป เด•เดดเดฟเดฏเต‚, เดŽเดฒเตเดฒเดพเดตเดฐเต†เดฏเตเด‚ เด’เดฐเตเดฎเดฟเดšเตเดšเต เดตเดฟเดŸเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

Travel = [ Or(
And(Human[i] == Human[i+1] + 1, Wolf[i] == Wolf[i+1] + 1, Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] + 1, Goat[i] == Goat[i+1] + 1, Wolf[i] == Wolf[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] + 1, Cabbage[i] == Cabbage[i+1] + 1, Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1]),
And(Human[i] == Human[i+1] - 1, Wolf[i] == Wolf[i+1] - 1, Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] - 1, Goat[i] == Goat[i+1] - 1, Wolf[i] == Wolf[i+1], Cabbage[i] == Cabbage[i+1]),
And(Human[i] == Human[i+1] - 1, Cabbage[i] == Cabbage[i+1] - 1, Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1]),
And(Wolf[i] == Wolf[i+1], Goat[i] == Goat[i+1], Cabbage[i] == Cabbage[i+1])) for i in range(Num-1) ]

เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดนเดพเดฐเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚.

solve(Side + Start + Finish + Safe + Travel)

เดจเดฎเตเด•เตเด•เต เด‰เดคเตเดคเดฐเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚!

เดŽเดฒเตเดฒเดพ เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเด‚ เดคเตƒเดชเตเดคเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจ เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดธเด‚เดธเตเดฅเดพเดจเด™เตเด™เตพ Z3 เด•เดฃเตเดŸเต†เดคเตเดคเดฟ.
เดธเตเดฅเดฒ-เดธเดฎเดฏเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดคเดฐเด‚ เดšเดคเตเดฐเดพเด•เตƒเดคเดฟเดฏเดฟเดฒเตเดณเตเดณ เด•เดพเดธเตเดฑเตเดฑเต.

เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเดšเตเดšเดคเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเด‚.

เด…เดตเดธเดพเดจเด‚ เดŽเดฒเตเดฒเดพเดตเดฐเตเด‚ เด•เดŸเดจเตเดจเตเดตเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต, เด†เดฆเตเดฏเด‚ เดžเด™เตเด™เดณเตเดŸเต† เด•เตผเดทเด•เตป เดตเดฟเดถเตเดฐเดฎเดฟเด•เตเด•เดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต, เด†เดฆเตเดฏเดคเตเดคเต† 2 เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเตฝ เด…เดตเตป เดŽเดตเดฟเดŸเต†เดฏเตเด‚ เดจเต€เดจเตเดคเตเดจเตเดจเดฟเดฒเตเดฒ.

Human_2 = 0
Human_3 = 0

เดžเด™เตเด™เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดค เดธเด‚เดธเตเดฅเดพเดจเด™เตเด™เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด…เดฎเดฟเดคเดฎเดพเดฃเต†เดจเตเดจเตเด‚ 8 เดฎเดคเดฟเดฏเดพเด•เตเดฎเต†เดจเตเดจเตเด‚ เด‡เดคเต เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด•เตผเดทเด•เตป เด‡เดคเต เดšเต†เดฏเตเดคเต: เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•, เดตเดฟเดถเตเดฐเดฎเดฟเด•เตเด•เตเด•, เดตเดฟเดถเตเดฐเดฎเดฟเด•เตเด•เตเด•, เด†เดŸเดฟเดจเต† เด•เดŸเด•เตเด•เตเด•, เดชเดฟเดจเตเดจเดฟเดฒเต‡เด•เตเด•เต เด•เดŸเด•เตเด•เตเด•, เด•เดพเดฌเต‡เดœเต เด•เดŸเด•เตเด•เตเด•, เด†เดŸเดฟเดจเตŠเดชเตเดชเด‚ เดฎเดŸเด™เตเด™เตเด•, เดšเต†เดจเตเดจเดพเดฏเดฏเต† เด•เดŸเด•เตเด•เตเด•, เด’เดฑเตเดฑเดฏเตเด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•, เด†เดŸเดฟเดจเต† เดตเต€เดฃเตเดŸเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด•.

เดŽเดจเตเดจเดพเตฝ เด…เดตเดธเดพเดจเด‚ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเต.

#ะกั‚ะฐั€ั‚.
 Human_1 = 0
 Wolf_1 = 0
 Goat_1 = 0
 Cabbage_1 = 0
 
 #ะคะตั€ะผะตั€ ะพั‚ะดั‹ั…ะฐะตั‚.
 Human_2 = 0
 Wolf_2 = 0
 Goat_2 = 0
 Cabbage_2 = 0
 
 #ะคะตั€ะผะตั€ ะพั‚ะดั‹ั…ะฐะตั‚.
 Human_3 = 0
 Wolf_3 = 0
 Goat_3 = 0
 Cabbage_3 = 0
 
 #ะคะตั€ะผะตั€ ะพั‚ะฒะพะทะธั‚ ะบะพะทัƒ ะฝะฐ ะฝัƒะถะฝั‹ะน ะฑะตั€ะตะณ.
 Human_4 = 1
 Wolf_4 = 0
 Goat_4 = 1
 Cabbage_4 = 0
 
 #ะคะตั€ะผะตั€ ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ัั.
 Human_5 = 0
 Wolf_5 = 0
 Goat_5 = 1
 Cabbage_5 = 0
 
 #ะคะตั€ะผะตั€ ะพั‚ะฒะพะทะธั‚ ะบะฐะฟัƒัั‚ัƒ ะฝะฐ ะฝัƒะถะฝั‹ะน ะฑะตั€ะตะณ.
 Human_6 = 1
 Wolf_6 = 0
 Cabbage_6 = 1
 Goat_6 = 1
 
 #ะšะปัŽั‡ะตะฒะฐั ั‡ะฐัั‚ัŒ ะพะฟะตั€ะฐั†ะธะธ: ั„ะตั€ะผะตั€ ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ ะบะพะทัƒ ะพะฑั€ะฐั‚ะฝะพ.
 Human_7 = 0
 Wolf_7 = 0
 Goat_7 = 0
 Cabbage_7 = 1
 
 #ะคะตั€ะผะตั€ ะพั‚ะฒะพะทะธั‚ ะฒะพะปะบะฐ ะฝะฐ ะดั€ัƒะณะพะน ะฑะตั€ะตะณ, ะณะดะต ะพะฝ ั‚ะตะฟะตั€ัŒ ะฝะฐั…ะพะดะธั‚ัั ะฒะผะตัั‚ะต ั ะบะฐะฟัƒัั‚ะพะน.
 Human_8 = 1
 Wolf_8 = 1
 Goat_8 = 0
 Cabbage_8 = 1
 
 #ะคะตั€ะผะตั€ ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ัั ะทะฐ ะบะพะทะพะน.
 Human_9 = 0
 Wolf_9 = 1
 Goat_9 = 0
 Cabbage_9 = 1
 
 #ะคะตั€ะผะตั€ ะฟะพะฒั‚ะพั€ะฝะพ ะดะพัั‚ะฐะฒะปัะตั‚ ะบะพะทัƒ ะฝะฐ ะฝัƒะถะฝั‹ะน ะฑะตั€ะตะณ ะธ ะทะฐะฒะตั€ัˆะฐัŽั‚ ะฟะตั€ะตะฟั€ะฐะฒัƒ.
 Human_10 = 1
 Wolf_10 = 1
 Goat_10 = 1
 Cabbage_10 = 1

เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เดตเตเดฏเดตเดธเตเดฅเด•เตพ เดฎเดพเดฑเตเดฑเดพเดจเตเด‚ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เดจเตเดจเต เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เดพเดจเตเด‚ เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚.

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เดณเตเดŸเต† เดšเต†เดจเตเดจเดพเดฏ เดธเดธเตเดฏเดญเด•เตเดทเดฃเด‚ เดจเตฝเด•เตเด‚, เด…เดตเตป เด•เดพเดฌเต‡เดœเต เด•เดดเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเด‚.
เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดžเด™เตเด™เดณเตเดŸเต† เดฒเด•เตเดทเตเดฏเด‚, เดชเดดเตเดคเตเด•เตพ เด‡เดฒเตเดฒเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เต‡เดฃเตเดŸ เด•เต‡เดธเตเดฎเดพเดฏเดฟ เด‡เดคเดฟเดจเต† เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเด‚.

 Safe = [ And( Or(Wolf[i] != Goat[i], Wolf[i] == Human[i]), Or(Goat[i] != Cabbage[i], Goat[i] == Human[i]), Or(Wolf[i] != Cabbage[i], Goat[i] == Human[i])) for i in range(Num) ]

Z3 เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดจเตฝเด•เดฟ:

 no solution

เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒ เดŽเดจเตเดจเดพเดฃเต.

เด…เด™เตเด™เดจเต†, เด•เตผเดทเด•เดจเต เดจเดทเตเดŸเด‚ เด•เต‚เดŸเดพเดคเต† เดธเตผเดตเดตเตเดฏเดพเดชเดฟเดฏเดพเดฏ เดšเต†เดจเตเดจเดพเดฏเดฏเตเดฎเดพเดฏเดฟ เด•เดŸเด•เตเด•เตเด• เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดพเดฑเตเดฑเดฟเด•เต เด†เดฏเดฟ เดคเต†เดณเดฟเดฏเดฟเดšเตเดšเต.

เดชเตเดฐเต‡เด•เตเดทเด•เตผเด•เตเด•เต เดˆ เดตเดฟเดทเดฏเด‚ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดญเดพเดตเดฟเดฏเดฟเดฒเต† เดฒเต‡เด–เดจเด™เตเด™เดณเดฟเตฝ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเต†เดฏเต‹ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต†เดฏเต‹ เด”เดชเดšเดพเดฐเดฟเด• เดฐเต€เดคเดฟเด•เตพเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด’เดฐเต เดธเดฎเดตเดพเด•เตเดฏเดฎเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเต เดŽเด™เตเด™เดจเต†เดฏเต†เดจเตเดจเต เดžเดพเตป เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚, เด…เดคเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเด•, เด…เดคเตเดตเดดเดฟ เดจเดฟเดฏเดฎเดพเดจเตเดธเตƒเดคเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเตเด‚ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚. เด†เดฆเตเดฏเด‚, เด…เดคเต‡ เดŸเดพเดธเตเด•เตเด•เดฟเตฝ, เดŽเดจเตเดจเดพเตฝ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเต, เดคเตเดŸเตผเดจเตเดจเต เด•เตเดฐเดฎเต‡เดฃ เด…เดคเต เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดธเต‹เดซเตเดฑเตเดฑเตเดตเต†เดฏเตผ เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเตเดฑเต† เดฒเต‹เด•เดคเตเดคเต เดจเดฟเดจเตเดจเตเดณเตเดณ เดจเดฟเดฒเดตเดฟเดฒเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด…เดŸเตเดคเตเดค เดฒเต‡เด–เดจเด‚ เด‡เดคเดฟเดจเด•เด‚ เดคเดฏเตเดฏเดพเดฑเดพเดฃเต:
เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ เด’เดฐเต เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต: PHP, Python เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เด’เดฐเต เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• VM เดŽเดดเตเดคเตเดจเตเดจเต

เด…เดคเดฟเตฝ เดžเดพเตป เดชเตเดฐเดถเตเดจเด™เตเด™เดณเตเดŸเต† เด”เดชเดšเดพเดฐเดฟเด• เดชเดฐเดฟเดถเต‹เดงเดจเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เตเด•เดฏเตเด‚ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
เด…เดต เดŽเด™เตเด™เดจเต† เดธเตเดตเดฏเดฎเต‡เดต เด”เดชเดšเดพเดฐเดฟเด• เดจเดฟเดฏเดฎ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เดณเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเดพเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•