рднреЗрдбрд╝рд┐рдпрд╛, рдмрдХрд░реА рдФрд░ рдкрддреНрддрд╛рдЧреЛрднреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд░реВрд╕реА-рднрд╛рд╖рд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╡рд┐рд╖рдп рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдХрдореА рд╣реИред

рдореИрдВ рдПрдХ рд╡рд┐рджреЗрд╢реА рд╕реНрд░реЛрдд рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдФрд░ рдПрдХ рднреЗрдбрд╝рд┐рдпрд╛, рдПрдХ рдмрдХрд░реА рдФрд░ рдПрдХ рдЧреЛрднреА рдХреЛ рдирджреА рдХреЗ рджреВрд╕рд░реА рддрд░рдл рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рдкреНрд░рд╕рд┐рджреНрдз рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдЬреЛрдбрд╝реВрдВрдЧрд╛ред

рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдорддрд▓рдм рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реИред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗ рдФрд░ рдЗрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛред

рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдзрди рд╣реИ: рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕рднреА рдореМрдЬреВрджрд╛ рдЫреЗрдж рдФрд░ рдмрдЧ рдвреВрдВрдврдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ 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

рд╕рдВрдЦреНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдирджреА, рдирд╛рд╡ рдФрд░ рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде 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 рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╡реАрдПрдо рд▓рд┐рдЦрдирд╛

рдЗрд╕рдореЗрдВ рдореИрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рд▓реЗрдХрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рддрдХ рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ
рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рдирд┐рдпрдо рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ