āĻāĻŽāĻžāĻ° āĻŽāĻ¤ā§, āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§āĻ° āĻ°āĻžāĻļāĻŋāĻ¯āĻŧāĻžāĻ¨-āĻāĻžāĻˇāĻž āĻ¸ā§āĻā§āĻāĻ°ā§, āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤āĻāĻžāĻŦā§ āĻāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§ āĻ¸āĻšāĻ āĻāĻŦāĻ āĻ¸ā§āĻĒāĻˇā§āĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻ āĻāĻžāĻŦ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻŦāĻŋāĻĻā§āĻļā§ āĻāĻ¤ā§āĻ¸ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĻā§āĻŦ, āĻāĻŦāĻ āĻ¨āĻĻā§āĻ° āĻ āĻĒāĻ° āĻĒāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻĄāĻŧā§, āĻāĻāĻāĻŋ āĻāĻžāĻāĻ˛ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ§āĻžāĻāĻĒāĻŋ āĻ āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻāĻ°āĻžāĻ° āĻ¸ā§āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻŦāĨ¤
āĻ¤āĻŦā§ āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻŽāĻŋ āĻ¸āĻāĻā§āĻˇā§āĻĒā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŦ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻā§ āĻāĻŦāĻ āĻā§āĻ¨ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻ āĻ°ā§āĻĨ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻŦāĻž āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ āĻ¨ā§āĻ¯āĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĨ¤
āĻāĻāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¯ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤āĻāĻžāĻŦā§ āĻāĻāĻ°āĻŖ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§āĨ¤
āĻĢāĻ°ā§āĻŽāĻžāĻ˛ āĻā§āĻ°āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻšāĻ˛ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻžāĻ° āĻāĻŦāĻ āĻĻā§āĻ° āĻāĻ°āĻžāĻ° āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻŽāĻžāĻ§ā§āĻ¯āĻŽ: āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¸āĻŦ āĻāĻŋāĻĻā§āĻ° āĻāĻŦāĻ āĻŦāĻžāĻ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻŦāĻž āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻ¯ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨ā§āĻāĨ¤
āĻāĻāĻŋ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¯ā§ āĻāĻŋāĻā§ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻŋ āĻ
āĻ¸āĻŽā§āĻāĻŦ, āĻ¯ā§āĻŽāĻ¨ 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 āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§ āĻ¨ā§āĻāĻĄāĻŧā§, āĻāĻžāĻāĻ˛ āĻāĻŦāĻ āĻŦāĻžāĻāĻ§āĻžāĻāĻĒāĻŋ āĻāĻ°āĻ āĻāĻāĻŋāĻ˛ āĻāĻŦāĻ āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻŦāĻŋāĻāĻžāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°ā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ˛āĻā§āĻˇā§āĻ¯āĻāĻŋ āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĻā§āĻŦāĻžāĻ°āĻžāĨ¤
āĻāĻāĻŋ āĻ¤ā§āĻ˛āĻ¨ā§āĻ¯āĻŧ, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĻā§āĻļā§āĻ¯ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻāĻ¨āĻā§āĻāĻļāĻ¨ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻāĻŋāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§, āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ āĻ§āĻŋāĻāĻžāĻ°āĻā§āĻ˛āĻŋāĻā§ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻāĻāĻŋ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻžāĻŦā§āĻ¨ā§ˇ
āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻļāĻ°ā§āĻ¤ āĻāĻŦāĻ āĻāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻā§āĻˇāĻāĻā§ āĻ¨āĻĻā§āĻ° āĻāĻĒāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻĄāĻŧā§, āĻāĻāĻāĻŋ āĻāĻžāĻāĻ˛ āĻāĻŦāĻ āĻŦāĻžāĻāĻ§āĻžāĻāĻĒāĻŋ āĻĒāĻ°āĻŋāĻŦāĻšāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻā§āĻˇāĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻž āĻāĻā§ āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻŦāĻ¸ā§āĻ¤ā§āĻā§ āĻŽāĻŋāĻāĻŽāĻžāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻā§āĻˇāĻ āĻ¨āĻŋāĻā§ āĻāĻžāĻĄāĻŧāĻžāĻāĨ¤ āĻ¨ā§āĻāĻĄāĻŧā§ āĻāĻžāĻāĻ˛ āĻāĻžāĻŦā§ āĻāĻŦāĻ āĻāĻžāĻāĻ˛ āĻŦāĻžāĻāĻ§āĻžāĻāĻĒāĻŋ āĻāĻžāĻŦā§ āĻ¯āĻĻāĻŋ āĻā§āĻˇāĻ āĻ¤āĻžāĻĻā§āĻ° āĻ āĻ¯āĻ¤ā§āĻ¨ā§ āĻā§āĻĄāĻŧā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻ¤ā§āĻ¤āĻ° āĻšāĻ˛ āĻ§āĻžāĻĒ 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
āĻāĻ° āĻŽāĻžāĻ¨ā§ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻā§āĻ¨ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¨ā§āĻāĨ¤
āĻāĻāĻāĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻā§āĻˇāĻā§āĻ° āĻā§āĻˇāĻ¤āĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻ¸āĻ°ā§āĻŦāĻā§āĻ āĻ¨ā§āĻāĻĄāĻŧā§ āĻĻāĻŋāĻ¯āĻŧā§ āĻĒāĻžāĻ°āĻžāĻĒāĻžāĻ°ā§āĻ° āĻ āĻ¸āĻŽā§āĻāĻŦāĻ¤āĻžāĻā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻāĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻ¯āĻĻāĻŋ āĻļā§āĻ°ā§āĻ¤āĻžāĻ°āĻž āĻāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋāĻā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻŽāĻ¨ā§ āĻāĻ°ā§āĻ¨, āĻ¤āĻŦā§ āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§āĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻŦāĻž āĻĢāĻžāĻāĻļāĻ¨āĻā§ āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯āĻĒā§āĻ°ā§āĻŖ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻāĻ°āĻŖā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ§ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻŦāĻ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻāĻāĻ¯āĻŧāĻ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻāĻ āĻāĻžāĻ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻāĻžāĻ°ā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻāĻāĻŋ āĻāĻāĻŋāĻ˛ āĻāĻŦāĻ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§āĻ° āĻŦāĻŋāĻļā§āĻŦā§āĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻāĻĻāĻžāĻšāĻ°āĻŖā§ āĻāĻ˛āĻ¨ā§āĻ¤.
āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤:
āĻāĻāĻŋāĻ¤ā§ āĻāĻŽāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻĨā§āĻā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻ˛ā§ āĻ¯āĻžāĻ āĻāĻŦāĻ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻŋ
āĻāĻŋāĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻˇā§āĻ āĻžāĻ¨āĻŋāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com