Π€ΠΎΡ€ΠΌΠ°Π»Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со Π²ΠΎΠ»ΠΊΠΎΡ‚, ΠΊΠΎΠ·Π°Ρ‚Π° ΠΈ Π·Π΅Π»ΠΊΠ°Ρ‚Π°

Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠΎΠ΅ мислСњС, Π²ΠΎ сСкторот Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Π½Π° руски јазик, Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π΅ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ ΠΏΠΎΠΊΡ€ΠΈΠ΅Π½Π°, Π° особСно нСдостасуваат Сдноставни ΠΈ јасни ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ.

ЌС Π΄Π°Π΄Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ΄ странски ΠΈΠ·Π²ΠΎΡ€, ΠΈ ќС Π΄ΠΎΠ΄Π°Π΄Π°ΠΌ своС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со ΠΏΡ€Π΅ΠΌΠΈΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π²ΠΎΠ»ΠΊ, ΠΊΠΎΠ·Π° ΠΈ Π·Π΅Π»ΠΊΠ° Π½Π° Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° страна Π½Π° Ρ€Π΅ΠΊΠ°Ρ‚Π°.

Но, ΠΏΡ€Π²ΠΎ, Π½Π°ΠΊΡ€Π°Ρ‚ΠΊΠΎ ќС опишам ΡˆΡ‚ΠΎ Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ Π·ΠΎΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π°.

Π€ΠΎΡ€ΠΌΠ°Π»Π½Π°Ρ‚Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π·Π½Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π΅Π΄Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚Π°ΠΌ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π΄Ρ€ΡƒΠ³Π°.

Ова Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Π° сС осигури Π΄Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° сС однСсува ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°, Π° исто Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° Π΄Π° сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ Π½Π΅Ρ˜Π·ΠΈΠ½Π°Ρ‚Π° бСзбСдност.

Π€ΠΎΡ€ΠΌΠ°Π»Π½Π°Ρ‚Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΅ Π½Π°Ρ˜ΠΌΠΎΡœΠ½ΠΎΡ‚ΠΎ срСдство Π·Π° ΠΏΡ€ΠΎΠ½Π°ΠΎΡ“Π°ΡšΠ΅ ΠΈ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° пропуститС: Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΈ ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Ρ‚Π΅ ситС постоСчки Π΄ΡƒΠΏΠΊΠΈ ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΈΠ»ΠΈ Π΄Π° Π΄ΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° Ρ‚ΠΈΠ΅ Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚.
Π’Ρ€Π΅Π΄ΠΈ Π΄Π° сС Π½Π°ΠΏΠΎΠΌΠ΅Π½Π΅ Π΄Π΅ΠΊΠ° Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ случаи Ρ‚ΠΎΠ° Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со 8 ΠΊΡ€Π°Π»ΠΈΡ†ΠΈ со ΡˆΠΈΡ€ΠΈΠ½Π° Π½Π° Ρ‚Π°Π±Π»Π° ΠΎΠ΄ 1000 ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈ: сè сС свСдува Π½Π° алгоритамска слоТСност ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со Π·Π°ΠΏΠΈΡ€Π°ΡšΠ΅.

Π‘Π΅ΠΏΠ°ΠΊ, Π²ΠΎ сСкој ΡΠ»ΡƒΡ‡Π°Ρ˜, ќС сС Π΄ΠΎΠ±ΠΈΠ΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈ: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΅ Ρ‚ΠΎΡ‡Π½Π°, Π½Π΅Ρ‚ΠΎΡ‡Π½Π° ΠΈΠ»ΠΈ Π½Π΅ бСшС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС прСсмСта ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΎΡ‚.

Ако Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС најдС ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€, чСсто Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ нСјасни Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Π½Π°ΠΌΠ°Π»ΡƒΠ²Π°Ρ˜ΡœΠΈ ја Π½ΠΈΠ²Π½Π°Ρ‚Π° алгоритамска слоТСност, со Ρ†Π΅Π» Π΄Π° сС Π΄ΠΎΠ±ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π΄Π° ΠΈΠ»ΠΈ Π½Π΅.

И Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π°Ρ‚Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° сС користи, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ систСми Π½Π° Windows ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ ΠΈ Π΄Ρ€ΠΎΠ½ΠΎΠ²ΠΈ 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

Π‘Ρ€ΠΎΡ˜ Π΅ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Ρ‡Π΅ΠΊΠΎΡ€ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅. БСкој Ρ‡Π΅ΠΊΠΎΡ€ ја прСтставува ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° Ρ€Π΅ΠΊΠ°Ρ‚Π°, Ρ‡Π°ΠΌΠ΅Ρ†ΠΎΡ‚ ΠΈ ситС Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚ΠΈ.

ЗасСга, Π΄Π° Π³ΠΎ ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌΠ΅ ΠΏΠΎ случаСн ΠΈΠ·Π±ΠΎΡ€ ΠΈ со ΠΌΠ°Ρ€ΠΆΠ° Π·Π΅ΠΌΠ΅ΠΌΠ΅ 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€