แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ›แƒ’แƒšแƒ˜แƒก, แƒ—แƒฎแƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒ›แƒ‘แƒแƒกแƒขแƒแƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒ˜แƒก แƒ แƒฃแƒกแƒฃแƒšแƒ”แƒœแƒแƒ•แƒแƒœ แƒกแƒ”แƒฅแƒขแƒแƒ แƒจแƒ˜ แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ”แƒ›แƒ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒคแƒแƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒœแƒแƒ—แƒ”แƒšแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ‘แƒแƒ.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก แƒ›แƒแƒ•แƒ˜แƒงแƒ•แƒแƒœ แƒฃแƒชแƒฎแƒแƒฃแƒ แƒ˜ แƒฌแƒงแƒแƒ แƒแƒ“แƒแƒœ แƒ“แƒ แƒฉแƒ”แƒ›แƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒแƒก แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘ แƒชแƒœแƒแƒ‘แƒ˜แƒš แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก, แƒ›แƒ’แƒšแƒ˜แƒก, แƒ—แƒฎแƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒ›แƒ‘แƒแƒกแƒขแƒแƒก แƒ’แƒแƒฆแƒ›แƒ แƒ’แƒแƒ“แƒแƒ™แƒ•แƒ”แƒ—แƒแƒก.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ›แƒแƒ™แƒšแƒ”แƒ“ แƒแƒฆแƒ•แƒฌแƒ”แƒ  แƒ แƒ แƒแƒ แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ“แƒ แƒ แƒแƒขแƒแƒ› แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ.

แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก แƒ”แƒ แƒ—แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒแƒœ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก แƒ›แƒ”แƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ”แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“, แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ˜แƒฅแƒชแƒ”แƒ•แƒ แƒ˜แƒกแƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜แƒ แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒ˜แƒกแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“.

แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒซแƒšแƒ˜แƒ”แƒ แƒ˜ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฌแƒงแƒ•แƒšแƒแƒ“แƒแƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒแƒฆแƒ›แƒแƒคแƒฎแƒ•แƒ แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ—: แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ˜แƒžแƒแƒ•แƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ•แƒ แƒ”แƒšแƒ˜ แƒ“แƒ แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜, แƒแƒœ แƒ“แƒแƒแƒ›แƒขแƒ™แƒ˜แƒชแƒแƒ—, แƒ แƒแƒ› แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.
แƒแƒฆแƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜แƒ, แƒ แƒแƒ› แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ”แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, 8 แƒ“แƒ”แƒ“แƒแƒคแƒšแƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ“แƒแƒคแƒ˜แƒก แƒกแƒ˜แƒ’แƒแƒœแƒ” 1000 แƒ™แƒ•แƒแƒ“แƒ แƒแƒขแƒ˜แƒ: แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒฃแƒš แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ›แƒ“แƒ” แƒแƒœ แƒ’แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒกแƒ—แƒแƒœ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒ—แƒฃแƒ›แƒชแƒ, แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒกแƒแƒ›แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒ“แƒแƒœ แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ: แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒกแƒฌแƒแƒ แƒ˜แƒ, แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜แƒ, แƒแƒœ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒšแƒ แƒ•แƒ”แƒ  แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ“แƒ.

แƒ—แƒฃ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒžแƒแƒ•แƒœแƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒฃแƒ แƒ™แƒ•แƒ”แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ, แƒ›แƒแƒ—แƒ˜ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ“แƒ˜แƒแƒฎ แƒแƒœ แƒแƒ แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“.

แƒ“แƒ แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Windows kernel แƒ“แƒ Darpa แƒ“แƒ แƒแƒœแƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒš แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒจแƒ˜, แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— 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

Num แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ. แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ˜แƒก, แƒœแƒแƒ•แƒ˜แƒก แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก.

แƒแƒฎแƒšแƒ แƒแƒ•แƒ˜แƒ แƒฉแƒ˜แƒแƒ— แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒ“แƒ แƒ–แƒฆแƒ•แƒ แƒ˜แƒ—, แƒแƒ•แƒ˜แƒฆแƒแƒ— 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

แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.

แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒแƒ“ แƒ“แƒแƒ•แƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ— แƒคแƒ”แƒ แƒ›แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒงแƒแƒ•แƒšแƒ˜แƒกแƒ›แƒญแƒแƒ›แƒ”แƒš แƒ›แƒ’แƒ”แƒšแƒ—แƒแƒœ แƒ’แƒแƒ“แƒแƒ™แƒ•แƒ”แƒ—แƒ˜แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ.

แƒ—แƒฃ แƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒ˜แƒแƒก แƒ”แƒก แƒ—แƒ”แƒ›แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ“ แƒ›แƒ˜แƒแƒฉแƒœแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒแƒ›แƒแƒ•แƒแƒš แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒจแƒ˜ แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒแƒฅแƒชแƒ˜แƒแƒ— แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒแƒœ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ  แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ—แƒแƒœ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“ แƒ’แƒแƒœแƒขแƒแƒšแƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒ›แƒแƒแƒ’แƒ•แƒแƒ แƒแƒ— แƒ˜แƒ’แƒ˜, แƒแƒ›แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒแƒ•แƒšแƒ˜แƒœแƒแƒ— แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒ•แƒ”แƒšแƒ แƒšแƒ”แƒ’แƒ˜แƒขแƒ˜แƒ›แƒฃแƒ แƒ˜ แƒกแƒชแƒ”แƒœแƒแƒ แƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ. แƒฏแƒ”แƒ  แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒ–แƒ”, แƒแƒฆแƒแƒœแƒ“ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒ—แƒแƒœแƒ“แƒแƒ—แƒแƒœ แƒ’แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ แƒ“แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ›แƒงแƒแƒ แƒแƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ–แƒ” แƒ’แƒแƒ“แƒแƒกแƒ•แƒšแƒ.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ แƒฃแƒ™แƒ•แƒ” แƒ›แƒ–แƒแƒ“ แƒแƒ แƒ˜แƒก:
แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ: แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒฃแƒ แƒ˜ VM-แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ PHP-แƒกแƒ แƒ“แƒ Python-แƒจแƒ˜

แƒ›แƒแƒกแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒ“แƒ˜แƒ•แƒแƒ  แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒแƒฆแƒ•แƒฌแƒ”แƒ 
แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ แƒ“แƒแƒ˜แƒฅแƒ›แƒœแƒแƒก แƒคแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒแƒ“.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ