рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд░реВрд╕реА рднрд╛рд╖реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╡рд┐рд╖рдп рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдХрдореА рд╣реИред
рдореИрдВ рдПрдХ рд╡рд┐рджреЗрд╢реА рд╕реНрд░реЛрдд рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдПрдХ рднреЗрдбрд╝рд┐рдпреЗ, рдмрдХрд░реА рдФрд░ рдЧреЛрднреА рдХреЛ рдирджреА рдХреЗ рджреВрд╕рд░реА рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреВрд░рдХ рдмрдиреВрдВрдЧрд╛ред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЕрд░реНрде рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ, рдФрд░ рдЗрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛред
рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдзрди рд╣реИ: рдпрд╣ рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рднреА рдореМрдЬреВрджрд╛ рдЫреЗрдж рдФрд░ рдмрдЧреНрд╕ рдХреЛ рдЦреЛрдЬрдиреЗ рдпрд╛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ 1000 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдмреЛрд░реНрдб рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде 8 рд░рд╛рдирд┐рдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ: рд╕рдм рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдЯрд┐рд▓рддрд╛ рдпрд╛ рд░реБрдХрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рддреАрди рдореЗрдВ рд╕реЗ рдПрдХ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛: рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рд╣реА рд╣реИ, рдЧрд▓рдд рд╣реИ, рдпрд╛ рдЙрддреНрддрд░ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдпрджрд┐ рдХреЛрдИ рдЙрддреНрддрд░ рдЦреЛрдЬрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдВ рдпрд╛ рдирд╣реАрдВред
рдФрд░ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдХрд░реНрдиреЗрд▓ рдФрд░ рдбрд╛рд░рдкрд╛ рдбреНрд░реЛрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдЕрдзрд┐рдХрддрдо рд╕реНрддрд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╣рдо Z3Prover рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рдореЗрдпреЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдорд╛рдг рдФрд░ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдгред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЗрдб 3 рдмрд┐рд▓реНрдХреБрд▓ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рдирд╡рд░ рдмрд▓ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╣ рдЙрди рдЬрд╡рд╛рдмреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдЬрд╣рд╛рдВ рдЗрдирдкреБрдЯ рд╡рд┐рдХрд▓реНрдк рдФрд░ 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) рдХрджрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдПрдХ рдЬреАрдИрдЯреА рдпрд╛ рдкреАрдУрдЯреАрдПрд╕ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рд░рд╛рдирд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдп рдХреА рддреБрд▓рдирд╛ рддреБрд▓рдиреАрдп рд╣реИ, рддреЛ рднреЗрдбрд╝рд┐рдпрд╛, рдмрдХрд░реА рдФрд░ рдЧреЛрднреА рдПрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╢реНрд░реЗрдгреА рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдиреБрд░реЛрдзреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рддреБрд▓рдиреАрдп рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдЗрдВрдЬреЗрдХреНрд╢рди рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ, рдлрд┐рд░ рдЕрдкрдиреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рдПрдВ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рдирдХрд┐рд╕рд╛рди рдХреЛ рдирджреА рдХреЗ рдкрд╛рд░ рднреЗрдбрд╝рд┐рдпреЗ, рдмрдХрд░реА рдФрд░ рдЧреЛрднреА рдХреА рдвреБрд▓рд╛рдИ рдХрд░рдиреА рд╣реЛрдЧреАред рдХрд┐рд╕рд╛рди рдХреЗ рдкрд╛рд╕ рдПрдХ рдирд╛рд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреЗрд╡рд▓ рдХрд┐рд╕рд╛рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рднреЗрдбрд╝рд┐рдпрд╛ рдмрдХрд░реА рдХреЛ рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдЧрд░ рдХрд┐рд╕рд╛рди рдЙрдиреНрд╣реЗрдВ рд▓рд╛рд╡рд╛рд░рд┐рд╕ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ рддреЛ рдЧреЛрднреА рдЧреЛрднреА рдЦрд╛рдПрдЧреАред
рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЪрд░рдг 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 рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рд╡реАрдПрдо рд▓рд┐рдЦрддреЗ рд╣реИрдВрдЗрд╕рдореЗрдВ, рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рддрдХ рдЬрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдФрдкрдЪрд╛рд░рд┐рдХ рдирд┐рдпрдо рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред