Π€ΠΎΡΠΌΠ°Π»Π½Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ΅ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ΅Π΄Π½ΠΎΠ³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎΠΌΠΎΡΡ Π΄ΡΡΠ³ΠΎΠ³.
ΠΠ²ΠΎ ΡΠ΅ ΡΠ΅Π΄Π½Π° ΠΎΠ΄ Π½Π°ΡΠΌΠΎΡΠ½ΠΈΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠΎΡΠ° Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΠΏΡΠΎΠ½Π°ΡΠ΅ΡΠ΅ ΡΠ²Π΅ ΡΠ°ΡΠΈΠ²ΠΎΡΡΠΈ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡ ΠΈΠ»ΠΈ Π΄ΠΎΠΊΠ°ΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ½Π΅ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠ΅.
ΠΠ΅ΡΠ°ΡΠ½ΠΈΡΠΈ ΠΎΠΏΠΈΡ ΡΠΎΡΠΌΠ°Π»Π½Π΅ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠ°Π²Π°ΡΠ° Π·Π°Π΄Π°ΡΠΊΠ°
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΠΏΡΠ΅Π»Π°Π·ΠΈΠΌ ΡΠ° ΡΠΎΡΠΌΠ°Π»Π½Π΅ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ ΠΈ ΠΎΠΏΠΈΡΡΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎ
ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΌΠΎΠ³Ρ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΏΡΠ΅ΡΠ²ΠΎΡΠΈΡΠΈ Ρ ΡΠΎΡΠΌΠ°Π»Π½Π΅ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°.
ΠΠ° Π±ΠΈΡ ΡΠΎ ΡΡΠ°Π΄ΠΈΠΎ, Π½Π°ΠΏΠΈΡΠ°ΠΎ ΡΠ°ΠΌ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈ Π°Π½Π°Π»ΠΎΠ³ Π²ΠΈΡΡΡΠ΅Π»Π½Π΅ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅.
ΠΠ½ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ Π³Π° Ρ ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅Π΄Π½Π°ΡΠΈΠ½Π° (Π‘ΠΠ’), ΠΊΠΎΡΠΈ ΡΠ΅ Π²Π΅Ρ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ΅ΡΠΈΡΠΈ.
ΠΠΎΡΡΠΎ ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΎ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ°ΡΡΠ½ΠΈΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½Π΅ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎ,
Π£ΠΊΡΠ°ΡΠΊΠΎ ΡΡ ΠΎΠΏΠΈΡΠ°ΡΠΈ ΡΡΠ° ΡΠ΅ ΡΠΎ.
Π‘ΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠΎ ΡΠ°ΡΡΠ½Π°ΡΠ΅ ΡΠ΅ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ ΠΈΠ·Π²ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌ Π½Π° ΡΠΈΡΠΎΠΊΠΎΠΌ ΡΠΏΠ΅ΠΊΡΡΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ Π³Π»Π°Π²Π½ΠΈ ΡΠ΅ Π°Π»Π°Ρ Π·Π° ΡΠΎΡΠΌΠ°Π»Π½Ρ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ ΡΠ»Π°Π·Π½Π΅ ΡΡΠ»ΠΎΠ²Π΅ Π³Π΄Π΅ ΠΏΡΠ²ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ·ΠΌΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½Ρ Π²ΡΠ΅Π΄Π½ΠΎΡΡ, Π΄ΡΡΠ³ΠΈ Π½Π΅Π³Π°ΡΠΈΠ²Π°Π½, ΡΡΠ΅ΡΠΈ Π½ΡΠ»Ρ, Π° ΠΈΠ·Π»Π°Π·Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, 42.
Π‘ΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠ° ΠΈΠ·ΡΠ°ΡΡΠ½Π°Π²Π°ΡΠ° Ρ ΡΠ΅Π΄Π½ΠΎΡ Π²ΠΎΠΆΡΠΈ ΡΠ΅ Π½Π°ΠΌ Π΄Π°ΡΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π΄Π° Π»ΠΈ ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ ΠΆΠ΅ΡΠ΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΏΠ° ΡΠ°ΠΊΠ²ΠΈΡ ΡΠ»Π°Π·Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ°. ΠΠ»ΠΈ Π΄ΠΎΠΊΠ°Π· Π΄Π° ΡΠ°ΠΊΠ²ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠ° Π½Π΅ΠΌΠ°.
Π¨ΡΠ°Π²ΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠ΄Π΅ΡΠΈΡΠΈ ΡΠ»Π°Π·Π½Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ Π½Π° ΡΠ²Π΅ ΠΌΠΎΠ³ΡΡΠ΅, Π° ΠΈΠ·Π°Π±ΡΠ°ΡΠΈ ΡΠ°ΠΌΠΎ ΠΎΠ½Π΅ ΠΈΠ·Π»Π°Π·Π½Π΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΡ Π»ΠΎΠ·ΠΈΠ½ΠΊΡ.
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΠΌΠΎ ΠΏΡΠΎΠ½Π°ΡΠΈ ΡΠ²Π΅ ΡΠ°ΡΠΈΠ²ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈΠ»ΠΈ ΡΠ΅ΠΌΠΎ Π΄ΠΎΠ±ΠΈΡΠΈ Π΄ΠΎΠΊΠ°Π· Π΄Π° ΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΡΠΈΠ³ΡΡΠ½Π°.
ΠΠΎΠΆΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠΈ Π΄Π° ΡΠ΅ ΠΊΠ»Π°ΡΠΈΡΠ½ΠΎ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΠΌ ΡΠ»Π°Π·Π½ΠΈΠΌ ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ° ΠΏΠΎΡΠ΅Π±Π°Π½ ΡΠ»ΡΡΠ°Ρ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠΎΠ³ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°.
ΠΠ°ΠΊΠ»Π΅, ΠΠ ΠΌΠΎΠ³ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠ° ΡΠ°ΠΊΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π΄ΠΈ Ρ ΡΠ΅ΠΆΠΈΠΌΡ Π΅ΠΌΡΠ»Π°ΡΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π΅ Π²ΠΈΡΡΡΠ΅Π»Π½Π΅ ΠΌΠ°ΡΠΈΠ½Π΅.
Π£ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ° Π½Π° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈ ΡΠ»Π°Π½Π°ΠΊ ΠΌΠΎΠΆΠ΅ ΡΠ΅ Π½Π°ΡΠΈ ΠΏΡΠ°Π²Π΅Π΄Π½Π° ΠΊΡΠΈΡΠΈΠΊΠ° ΡΠΎΡΠΌΠ°Π»Π½Π΅ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ ΡΠ° ΡΠ°ΡΠΏΡΠ°Π²ΠΎΠΌ ΠΎ ΡΠ΅Π½ΠΈΠΌ ΡΠ»Π°Π±ΠΎΡΡΠΈΠΌΠ°.
ΠΠ»Π°Π²Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΡ:
- ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ·ΠΈΡΠ°, ΠΏΠΎΡΡΠΎ ΡΠ΅ ΡΠΎΡΠΌΠ°Π»Π½Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΊΡΠ°ΡΡ ΡΠ²ΠΎΠ΄ΠΈ Π½Π° Π=ΠΠ
- ΠΠ±ΡΠ°Π΄Ρ ΠΏΠΎΠ·ΠΈΠ²Π° Ρ ΡΠΈΡΡΠ΅ΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΌΡΠ΅ΠΆΠ΅ ΠΈ Π΄ΡΡΠ³Ρ ΡΠΏΠΎΡΠ½Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡ ΡΠ΅ ΡΠ΅ΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠΈ
- ΠΡΠ΅ΡΠΊΠ΅ Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΈ, ΠΊΠ°Π΄Π° ΡΠ΅ ΠΊΡΠΏΠ°Ρ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ Π½Π°ΠΌΠ΅ΡΠ°Π²Π°ΠΎ ΡΠ΅Π΄Π½Ρ ΡΡΠ²Π°Ρ, Π°Π»ΠΈ ΡΠΎ Π½ΠΈΡΠ΅ Π΄ΠΎΠ²ΠΎΡΠ½ΠΎ ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎ ΠΎΠΏΠΈΡΠ°ΠΎ Ρ ΡΠ΅Ρ Π½ΠΈΡΠΊΠΎΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΈ.
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ³Π°, ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΡΠ΅ Π±ΠΈΡΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π½ ΠΈ ΡΡΠΊΠ»Π°ΡΠ΅Π½ ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΎΠΌ, Π°Π»ΠΈ ΡΠ΅ ΡΠ°Π΄ΠΈΡΠΈ Π½Π΅ΡΡΠΎ ΠΏΠΎΡΠΏΡΠ½ΠΎ Π΄ΡΡΠ³Π°ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΎΠ½ΠΎΠ³Π° ΡΡΠΎ ΡΡ ΠΊΡΠ΅Π°ΡΠΎΡΠΈ ΠΎΡΠ΅ΠΊΠΈΠ²Π°Π»ΠΈ ΠΎΠ΄ ΡΠ΅Π³Π°.
ΠΠΎΡΡΠΎ Ρ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ³Π»Π°Π²Π½ΠΎΠΌ ΡΠ°Π·ΠΌΠ°ΡΡΠ°ΠΌ ΠΏΡΠΈΠΌΠ΅Π½Ρ ΡΠΎΡΠΌΠ°Π»Π½Π΅ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅ Ρ ΠΏΡΠ°ΠΊΡΠΈ, Π·Π° ΡΠ°Π΄Π° Π½Π΅ΡΡ Π΄Π° Π»ΡΠΏΠ°ΠΌ Π³Π»Π°Π²ΠΎΠΌ ΠΎ Π·ΠΈΠ΄, Π²Π΅Ρ ΡΡ ΠΈΠ·Π°Π±ΡΠ°ΡΠΈ ΡΠΈΡΡΠ΅ΠΌ Π³Π΄Π΅ ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠ°ΠΌΡΠΊΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ ΠΈ Π±ΡΠΎΡ Π΅ΠΊΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΠΎΠ·ΠΈΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ.
ΠΠΎΡΡΠΎ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ ΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π°ΡΠ±ΠΎΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡ ΠΎΠ²ΠΈΠΌ Π·Π°Ρ ΡΠ΅Π²ΠΈΠΌΠ°, ΠΈΠ·Π±ΠΎΡ ΡΠ΅ ΠΏΠ°ΠΎ Π½Π° Π ΠΠΠ ΡΠ³ΠΎΠ²ΠΎΡΠ΅ ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ΠΠ°Π²Π΅Ρ: ΠΎΠ½ΠΈ Π½ΠΈΡΡ ΠΏΠΎΡΠΏΡΠ½ΠΈ ΠΏΠΎ Π’ΡΡΡΠΈΠ½Π³Ρ, Π° ΡΠΈΡ ΠΎΠ²Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡ ΡΠ΅ Π²Π΅ΡΡΠ°ΡΠΊΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π°.
ΠΠ»ΠΈ ΠΌΠΈ ΡΠ΅ΠΌΠΎ ΠΈΡ ΡΠ°Π·ΠΌΠΎΡΡΠΈΡΠΈ ΠΈΡΠΊΡΡΡΠΈΠ²ΠΎ ΡΠ° ΡΠ΅Ρ Π½ΠΈΡΠΊΠ΅ ΡΡΡΠ°Π½Π΅.
ΠΠΎΡΠ΅Π΄ ΡΠ²Π΅Π³Π°, ΡΠΎΡΠΌΠ°Π»Π½Π° Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΡΡΠ°ΠΆΠ΅Π½Π° Π·Π° ΡΠ²Π΅ ΡΠ³ΠΎΠ²ΠΎΡΠ΅: ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ Π½Π΅ΠΌΠΎΠ³ΡΡΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΠΈ Π³ΡΠ΅ΡΠΊΡ Ρ ΡΠ³ΠΎΠ²ΠΎΡΡ Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠ°.
Π ΡΠ΅Π½Π° ΡΠ°ΠΊΠ²ΠΈΡ
Π³ΡΠ΅ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ Π²Π΅ΠΎΠΌΠ° Π²ΠΈΡΠΎΠΊΠ°, ΡΠ΅Ρ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠ΅ ΠΊΠΎΠ»ΠΈΡΠΈΠ½Π΅ ΡΡΠ΅Π΄ΡΡΠ°Π²Π° ΡΠ΅ΡΡΠΎ ΡΡΠ²Π°ΡΡ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈΠΌ ΡΠ³ΠΎΠ²ΠΎΡΠΈΠΌΠ°.
ΠΠΎΡΠ° ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠ° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Ρ ΠΠ₯Π-Ρ ΠΈ ΠΠΈΡΡ ΠΎΠ½-Ρ ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ Π3ΠΡΠΎΠ²Π΅Ρ ΠΈΠ· ΠΠΈΡΡΠΎΡΠΎΡΡ Π Π΅ΡΠ΅Π°ΡΡΡ -Π° Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠΈΡΠ°ΡΡΡΠΈΡ Π‘ΠΠ’ ΡΠΎΡΠΌΡΠ»Π°.
Π£ ΠΎΡΠ½ΠΎΠ²ΠΈ ΡΠ΅ ΠΌΠΎΡΠ½Π° ΠΌΡΠ»ΡΠΈΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΎΠ½Π° ΠΏΡΠ΅ΡΡΠ°Π³Π°, ΠΊΠΎΡΠ°
ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΏΡΠΎΠ½Π°ΡΠ΅ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΡΠ°ΡΠΈΠ²ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΈ Π°ΠΊΠΎ Π·Π°Ρ
ΡΠ΅Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°.
Π§Π°ΠΊ
ΠΠ»ΠΈ Π²ΡΠ΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ Π΄Π° ΡΡ Π΅ΡΠ°ΡΡΠΊΠΈ ΡΠ³ΠΎΠ²ΠΎΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΈ ΠΈ Π΄Π° ΡΡ Π’ΡΡΡΠΈΠ½Π³ ΠΏΠΎΡΠΏΡΠ½ΠΈ.
ΠΠ₯Π ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈ ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΠΊΠΎΠ΄ Π ΠΠΠ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΎΠ³ ΡΠ³ΠΎΠ²ΠΎΡΠ° Ρ ΠΏΠΈΡΡ ΠΎΠ½ ΡΠΊΡΠΈΠΏΡΡ, Ρ ΠΊΠΎΡΠΎΡ ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½ ΠΊΠ°ΠΎ Π3 Π‘ΠΠ’-ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π°Π½ ΡΠΈΡΡΠ΅ΠΌ ΡΡΠ°ΡΠ° ΡΠ³ΠΎΠ²ΠΎΡΠ° ΠΈ ΡΡΠ»ΠΎΠ²Π° Π·Π° ΡΠΈΡ ΠΎΠ²Π΅ ΡΡΠ°Π½Π·ΠΈΡΠΈΡΠ΅:
Π‘Π°Π΄Π° ΡΡ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°ΡΠΈ ΡΡΠ° ΡΠ΅ Π΄Π΅ΡΠ°Π²Π° ΡΠ½ΡΡΡΠ°.
ΠΠ»ΠΈ ΠΏΡΠ²ΠΎ, Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ΅ΡΠΈ ΠΎ ΡΠ΅Π·ΠΈΠΊΡ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΎΠ³ ΡΠ³ΠΎΠ²ΠΎΡΠ° Π ΠΠΠ.
Π’ΠΎ ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ΅Π·ΠΈΠΊ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΈΠ·ΡΠ°Π·Ρ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎ Π΄ΠΈΠ·Π°ΡΠ½Ρ Π»Π΅Ρ.
Π ΠΠΠ ΡΠ°Π΄ΠΈ ΠΈΠ·ΠΎΠ»ΠΎΠ²Π°Π½ΠΎ ΡΠ½ΡΡΠ°Ρ Π±Π»ΠΎΠΊ Π»Π°Π½ΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ° ΠΈ ΡΠΏΠΈΡΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΈΠ· ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΎΠ³ ΡΠ° Π½ΠΎΠ²ΡΠ°Π½ΠΈΠΊΠΎΠΌ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ°.
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠΈ Π ΠΠΠ ΡΠ³ΠΎΠ²ΠΎΡ Π·Π° ΡΠ²Π°ΠΊΠΈ Π½ΠΎΠ²ΡΠ°Π½ΠΈΠΊ, Π° ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° ΡΠ΅ Π±ΠΈΡΠΈ ΡΠ°ΠΌΠΎ Π’ΠΠ§ΠΠ ΠΈΠ»ΠΈ ΠΠΠΠΠ.
Π’Π Π£Π Π·Π½Π°ΡΠΈ Π΄Π° ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ ΡΠ³ΠΎΠ²ΠΎΡ Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΡ, Π° Π€ΠΠΠ‘Π Π·Π½Π°ΡΠΈ Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ°ΡΡΡΠ΅.
ΠΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠΊΡΠΈΠΏΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π±ΡΠ°Π½ΠΈ ΡΡΠ°Π½ΡΡΠ΅Ρ Π°ΠΊΠΎ ΡΠ΅ ΡΡΠ°ΡΠ΅ Ρ Π½ΠΎΠ²ΡΠ°Π½ΠΈΠΊΡ ΠΌΠ°ΡΠ΅ ΠΎΠ΄ 100.
ΠΠ°ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ·Π΅ΡΡ ΠΈΡΡΠΈ ΠΡΠΊ, ΠΠΎΠ·Π° ΠΈ ΠΡΠΏΡΡ, Π°Π»ΠΈ Π²Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½ΠΈ Ρ ΠΎΠ±Π»ΠΈΠΊΡ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΎΠ³ ΡΠ³ΠΎΠ²ΠΎΡΠ°.
ΠΠΎΡΠΈΡΠ½ΠΈΠΊ Π½Π΅ΡΠ΅ ΠΌΠΎΡΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΈΠΆΠ΅ Π½ΠΎΠ²Π°Ρ ΠΈΠ· Π½ΠΎΠ²ΡΠ°Π½ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠΌΠ΅ ΡΠ΅ ΡΠ³ΠΎΠ²ΠΎΡ ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠ΅Π½ Π΄ΠΎΠΊ ΡΠ²Π΅ Π½Π΅ ΠΏΠΎΡΠ°ΡΠ΅ Π½Π° Π΄ΡΡΠ³Ρ ΡΡΡΠ°Π½Ρ.
#ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°
let contract = tx.sender
let human= extract(getInteger(contract,"human"))
let wolf= extract(getInteger(contract,"wolf"))
let goat= extract(getInteger(contract,"goat"))
let cabbage= extract(getInteger(contract,"cabbage"))
#ΠΡΠΎ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π΄Π°ΡΠ°-ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΈΡΡΠ»Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ 4 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
#ΠΠΎΠ½ΡΡΠ°ΠΊΡ ΡΠ°Π·ΡΠ΅ΡΠΈΡ Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΡΠ°Π½ΡΡΡΡ Π² ΡΠΎΡ
ΡΠ°Π½Π½ΠΎΡΡΠΈ.
match tx {
case t:DataTransaction =>
#ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π±ΡΠ΄ΡΡΠ΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
let newHuman= extract(getInteger(t.data,"human"))
let newWolf= extract(getInteger(t.data,"wolf"))
let newGoat= extract(getInteger(t.data,"goat"))
let newCabbage= extract(getInteger(t.data,"cabbage"))
#0 ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π° Π»Π΅Π²ΠΎΠΌ Π±Π΅ΡΠ΅Π³Ρ, Π° 1 ΡΡΠΎ Π½Π° ΠΏΡΠ°Π²ΠΎΠΌ
let humanSide= human == 0 || human == 1
let wolfSide= wolf == 0 || wolf == 1
let goatSide= goat == 0 || goat == 1
let cabbageSide= cabbage == 0 || cabbage == 1
let side= humanSide && wolfSide && goatSide && cabbageSide
#ΠΡΠ΄ΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π³Π΄Π΅ Ρ ΠΊΠΎΠ·ΠΎΠΉ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅Ρ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ΅ΡΠΌΠ΅ΡΠ°.
let safeAlone= newGoat != newWolf && newGoat != newCabbage
let safe= safeAlone || newGoat == newHuman
let humanTravel= human != newHuman
#Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΡ ΡΠ΅ΡΠΌΠ΅ΡΠ° ΡΡΠ΄Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Ρ ΠΊΠ΅ΠΌ-ΡΠΎ Π»ΠΈΠ±ΠΎ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡΠΊΡ.
let t1= humanTravel && newWolf == wolf + 1 && newGoat == goat && newCabbage == cabbage
let t2= humanTravel && newWolf == wolf && newGoat == goat + 1 && newCabbage == cabbage
let t3= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage + 1
let t4= humanTravel && newWolf == wolf - 1 && newGoat == goat && newCabbage == cabbage
let t5= humanTravel && newWolf == wolf && newGoat == goat - 1 && newCabbage == cabbage
let t6= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage - 1
let t7= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage
let objectTravel = t1 || t2 || t3 || t4 || t5 || t6 || t7
#ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΠΊΠ° Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΠ΅Π΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅.
#ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1 ΠΈΠ»ΠΈ 0, Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ
#Π±ΡΡΡ Π² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π° ΡΠ΅ΡΠΌΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΏΠ»ΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡΠΊΡ
#ΠΈΠ»ΠΈ Ρ ΠΊΠ΅ΠΌ-ΡΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Ρ
side && safe && humanTravel && objectTravel
case s:TransferTransaction =>
#Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠ»ΡΠ»ΠΈ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π±Π΅ΡΠ΅Π³
human == 1 && wolf == 1 && goat == 1 && cabbage == 1
#ΠΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ ΡΠΈΠΏΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Ρ
case _ => false
}
ΠΠ₯Π ΠΏΡΠ²ΠΎ ΠΈΠ·Π΄Π²Π°ΡΠ° ΡΠ²Π΅ Π²Π°ΡΠΈΡΠ°Π±Π»Π΅ ΠΈΠ· ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΎΠ³ ΡΠ³ΠΎΠ²ΠΎΡΠ° Ρ ΠΎΠ±Π»ΠΈΠΊΡ ΡΠΈΡ ΠΎΠ²ΠΈΡ ΠΊΡΡΡΠ΅Π²Π° ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΠΡΠ»ΠΎΠ²ΠΎΠ³ ΠΈΠ·ΡΠ°Π·Π°.
cabbage: extract ( getInteger ( contract , "cabbage" ) )
goat: extract ( getInteger ( contract , "goat" ) )
human: extract ( getInteger ( contract , "human" ) )
wolf: extract ( getInteger ( contract , "wolf" ) )
fState: human== 1 && wolf== 1 && goat== 1 && cabbage== 1
fState:
wolf:
goat:
cabbage:
cabbageSide: cabbage== 0 || cabbage== 1
human: extract ( getInteger ( contract , "human" ) )
newGoat: extract ( getInteger ( t.data , "goat" ) )
newHuman: extract ( getInteger ( t.data , "human" ) )
goatSide: goat== 0 || goat== 1
humanSide: human== 0 || human== 1
t7: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage
t3: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage + 1
t6: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage - 1
t2: humanTravel && newWolf== wolf && newGoat== goat + 1 && newCabbage== cabbage
t5: humanTravel && newWolf== wolf && newGoat== goat - 1 && newCabbage== cabbage
t1: humanTravel && newWolf== wolf + 1 && newGoat== goat && newCabbage== cabbage
t4: humanTravel && newWolf== wolf - 1 && newGoat== goat && newCabbage== cabbage
safeAlone: newGoat != newWolf && newGoat != newCabbage
wolfSide: wolf== 0 || wolf== 1
humanTravel: human != newHuman
side: humanSide && wolfSide && goatSide && cabbageSide
safe: safeAlone || newGoat== newHuman
objectTravel: t1 || t2 || t3 || t4 || t5 || t6 || t7
ΠΠ₯Π ΠΈΡ
Π·Π°ΡΠΈΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΡΡΠ΅ Ρ ΠΎΠΏΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΎΠ³ ΡΠ° Π3ΠΡΠΎΠ²Π΅Ρ Π‘ΠΠ’ Ρ ΠΠΈΡΡ
ΠΎΠ½-Ρ.
ΠΠΎΠ΄Π°ΡΠΈ ΡΡ ΡΠΌΠΎΡΠ°Π½ΠΈ Ρ ΠΏΠ΅ΡΡΡ, Π³Π΄Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ, Π²Π°ΡΠΈΡΠ°Π±Π»Π΅ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ + 1, Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΡΠ° ΠΈΠ·ΡΠ°Π·ΠΈΠΌΠ° ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΏΡΠ΅Π»Π°Π·Π°ΠΊ ΠΈΠ· ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎΠ³ ΡΡΠ°ΡΠ° Ρ ΡΠ»Π΅Π΄Π΅ΡΠ΅.
ΠΠ²ΠΎ ΡΠ΅ ΡΠ°ΠΌΠΎ ΡΡΡΠ΅ Π½Π°ΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½Π΅ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΊΠΎΡΠ° ΠΏΡΡΠΆΠ° Π²ΠΈΡΠ΅ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΎΠ½ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΠ°.
fState: And( And( And( human[Steps] == 1 , wolf[Steps] == 1 ) , goat[Steps] == 1 ) , cabbage[Steps] == 1 )
final: fState[Steps]
fState:
wolf:
goat:
cabbage:
cabbageSide: Or( cabbage[i] == 0 , cabbage[i] == 1 )
goatSide: Or( goat[i] == 0 , goat[i] == 1 )
humanSide: Or( human[i] == 0 , human[i] == 1 )
t7: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] )
t3: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] + 1 )
t6: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] - 1 )
t2: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] + 1 ) , cabbage == cabbage[i] )
t5: And( And( And( humanTravel[i] , wolf == wolf[i] ) , goat[i+1] == goat[i] - 1 ) , cabbage == cabbage[i] )
t1: And( And( And( humanTravel[i] , wolf == wolf[i] + 1 ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] )
t4: And( And( And( humanTravel[i] , wolf == wolf[i] - 1 ) , goat[i+1] == goat[i] ) , cabbage == cabbage[i] )
safeAlone: And( goat[i+1] != wolf , goat[i+1] != cabbage )
wolfSide: Or( wolf[i] == 0 , wolf[i] == 1 )
humanTravel: human[i] != human[i+1]
side: And( And( And( humanSide[i] , wolfSide[i] ) , goatSide[i] ) , cabbageSide[i] )
safe: Or( safeAlone[i] , goat[i+1] == human[i+1] )
objectTravel: Or( Or( Or( Or( Or( Or( t1[i] , t2[i] ) , t3[i] ) , t4[i] ) , t5[i] ) , t6[i] ) , t7[i] )
data: And( And( And( side[i] , safe[i] ) , humanTravel[i] ) , objectTravel[i] )
Π£ΡΠ»ΠΎΠ²ΠΈ ΡΠ΅ ΡΠΎΡΡΠΈΡΠ°ΡΡ ΠΈ ΡΠ±Π°ΡΡΡΡ Ρ ΡΠ°Π±Π»ΠΎΠ½ ΡΠΊΡΠΈΠΏΡΠ΅ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ Π΄Π° ΠΎΠΏΠΈΡΠ΅ Π‘ΠΠ’ ΡΠΈΡΡΠ΅ΠΌ Ρ ΠΠΈΡΡ ΠΎΠ½-Ρ.
ΠΡΠ°Π·Π°Π½ ΡΠ°Π±Π»ΠΎΠ½
import json
from z3 import *
s = Solver()
Steps=7
Num= Steps+1
$code$
#template, only start rest
s.add(data + start)
#template
s.add(final)
ind = 0
f = open("/var/www/html/all/bin/python/log.txt", "a")
while s.check() == sat:
ind = ind +1
print ind
m = s.model()
print m
print "traversing model..."
#for d in m.decls():
#print "%s = %s" % (d.name(), m[d])
f.write(str(m))
f.write("nn")
exit()
#s.add(Or(goat[0] != s.model()[data[0]] )) # prevent next model from using the same assignment as a previous model
print "Total solution number: "
print ind
f.close()
ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄ΡΠ΅ ΡΡΠ°ΡΠ΅ Ρ ΡΠ΅Π»ΠΎΠΌ Π»Π°Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡΡΡ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΡΠ° ΡΡ Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρ ΠΎΠ΄Π΅ΡΠΊΡ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ΅ ΠΏΡΠ΅Π½ΠΎΡΠ°.
Π’ΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΡΠ΅ Π3ΠΡΠΎΠ²Π΅Ρ ΡΡΠ°ΠΆΠΈΡΠΈ ΡΠΏΡΠ°Π²ΠΎ ΡΠ°ΠΊΠ²Π΅ ΡΠ΅ΡΠΎΠ²Π΅ ΡΡΠ»ΠΎΠ²Π° ΠΊΠΎΡΠΈ ΡΠ΅ Π½Π° ΠΊΡΠ°ΡΡ ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠΈ ΠΏΠΎΠ²Π»Π°ΡΠ΅ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ°Π²Π° ΠΈΠ· ΡΠ³ΠΎΠ²ΠΎΡΠ°.
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ ΠΏΠΎΡΠΏΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°Π½ Π‘ΠΠ’ ΠΌΠΎΠ΄Π΅Π» Π½Π°ΡΠ΅Π³ ΡΠ³ΠΎΠ²ΠΎΡΠ°.
ΠΠΈΠ΄ΠΈΡΠ΅ Π΄Π° ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΡΠ»ΠΈΡΠ°Π½ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ· ΠΌΠΎΠ³ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎΠ³ ΡΠ»Π°Π½ΠΊΠ°, ΠΊΠΎΡΠΈ ΡΠ°ΠΌ ΡΠ°ΡΡΠ°Π²ΠΈΠΎ ΡΡΡΠ½ΠΎ.
ΠΠ°Π²ΡΡΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½
import json
from z3 import *
s = Solver()
Steps=7
Num= Steps+1
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) ]
nothing= [ And( human[i] == human[i+1], wolf[i] == wolf[i+1], goat[i] == goat[i+1], cabbage[i] == cabbage[i+1] ) for i in range(Num-1) ]
start= [ human[0] == 1, wolf[0] == 0, goat[0] == 1, cabbage[0] == 0 ]
safeAlone= [ And( goat[i+1] != wolf[i+1] , goat[i+1] != cabbage[i+1] ) for i in range(Num-1) ]
safe= [ Or( safeAlone[i] , goat[i+1] == human[i+1] ) for i in range(Num-1) ]
humanTravel= [ human[i] != human[i+1] for i in range(Num-1) ]
cabbageSide= [ Or( cabbage[i] == 0 , cabbage[i] == 1 ) for i in range(Num-1) ]
goatSide= [ Or( goat[i] == 0 , goat[i] == 1 ) for i in range(Num-1) ]
humanSide= [ Or( human[i] == 0 , human[i] == 1 ) for i in range(Num-1) ]
t7= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t3= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] + 1 ) for i in range(Num-1) ]
t6= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] - 1 ) for i in range(Num-1) ]
t2= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] + 1 ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t5= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] ) , goat[i+1] == goat[i] - 1 ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t1= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] + 1 ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
t4= [ And( And( And( humanTravel[i] , wolf[i+1] == wolf[i] - 1 ) , goat[i+1] == goat[i] ) , cabbage[i+1] == cabbage[i] ) for i in range(Num-1) ]
wolfSide= [ Or( wolf[i] == 0 , wolf[i] == 1 ) for i in range(Num-1) ]
side= [ And( And( And( humanSide[i] , wolfSide[i] ) , goatSide[i] ) , cabbageSide[i] ) for i in range(Num-1) ]
objectTravel= [ Or( Or( Or( Or( Or( Or( t1[i] , t2[i] ) , t3[i] ) , t4[i] ) , t5[i] ) , t6[i] ) , t7[i] ) for i in range(Num-1) ]
data= [ Or( And( And( And( side[i] , safe[i] ) , humanTravel[i] ) , objectTravel[i] ) , nothing[i]) for i in range(Num-1) ]
fState= And( And( And( human[Steps] == 1 , wolf[Steps] == 1 ) , goat[Steps] == 1 ) , cabbage[Steps] == 1 )
final= fState
#template, only start rest
s.add(data + start)
#template
s.add(final)
ind = 0
f = open("/var/www/html/all/bin/python/log.txt", "a")
while s.check() == sat:
ind = ind +1
print ind
m = s.model()
print m
print "traversing model..."
#for d in m.decls():
#print "%s = %s" % (d.name(), m[d])
f.write(str(m))
f.write("nn")
exit()
#s.add(Or(goat[0] != s.model()[data[0]] )) # prevent next model from using the same assignment as a previous model
print "Total solution number: "
print ind
f.close()
ΠΠ°ΠΊΠΎΠ½ Π»Π°Π½ΡΠΈΡΠ°ΡΠ°, Π3ΠΡΠΎΠ²Π΅Ρ ΡΠ΅ΡΠ°Π²Π° ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ ΡΠ³ΠΎΠ²ΠΎΡ ΠΈ ΠΏΡΡΠΆΠ° Π½Π°ΠΌ Π»Π°Π½Π°Ρ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ Π½Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠΈ Π΄Π° ΠΏΠΎΠ²ΡΡΠ΅ΠΌΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°:
Winning transaction chain found:
Data transaction: human= 0, wolf= 0, goat= 1, cabbage= 0
Data transaction: human= 1, wolf= 0, goat= 1, cabbage= 1
Data transaction: human= 0, wolf= 0, goat= 0, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 0, cabbage= 1
Data transaction: human= 0, wolf= 1, goat= 0, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1
Transfer transaction
ΠΠΎΡΠ΅Π΄ ΡΠ³ΠΎΠ²ΠΎΡΠ° ΠΎ ΡΡΠ°ΡΠ΅ΠΊΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ ΡΠ° ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΠΌ ΡΠ³ΠΎΠ²ΠΎΡΠΈΠΌΠ° ΠΈΠ»ΠΈ ΠΈΡΠΏΡΠΎΠ±Π°ΡΠΈ ΠΎΠ²Π°Ρ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° Ρ 2 ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ΅.
let contract = tx.sender
let a= extract(getInteger(contract,"a"))
let b= extract(getInteger(contract,"b"))
let c= extract(getInteger(contract,"c"))
let d= extract(getInteger(contract,"d"))
match tx {
case t:DataTransaction =>
let na= extract(getInteger(t.data,"a"))
let nb= extract(getInteger(t.data,"b"))
let nc= extract(getInteger(t.data,"c"))
let nd= extract(getInteger(t.data,"d"))
nd == 0 || a == 100 - 5
case s:TransferTransaction =>
( a + b - c ) * d == 12
case _ => true
}
ΠΠΎΡΡΠΎ ΡΠ΅ ΠΎΠ²ΠΎ ΠΏΡΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ°, ΡΠΈΠ½ΡΠ°ΠΊΡΠ° ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ΄Π° ΠΈΠΌΠ° Π³ΡΠ΅ΡΠ°ΠΊΠ°.
Π£ Π½Π°ΡΠ΅Π΄Π½ΠΈΠΌ ΡΠ»Π°Π½ΡΠΈΠΌΠ° ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° ΠΏΠΎΠΊΡΠΈΡΠ΅ΠΌ Π΄Π°ΡΠΈ ΡΠ°Π·Π²ΠΎΡ ΠΠ-Π° ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊΠΎ ΡΠ· ΡΠ΅Π³ΠΎΠ²Ρ ΠΏΠΎΠΌΠΎΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ ΡΠΎΡΠΌΠ°Π»Π½ΠΎ Π²Π΅ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π½Π΅ ΠΏΠ°ΠΌΠ΅ΡΠ½Π΅ ΡΠ³ΠΎΠ²ΠΎΡΠ΅, Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΠΈΡ
ΡΠ΅ΡΠ°Π²Π°ΡΠ΅.
ΠΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠ° ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π°
ΠΠ°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ°ΠΌ ΡΡΠ΅Π΄ΠΈΠΎ ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΠΊΠΎΠ΄ ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠΊΠ΅ ΠΠ ΠΈ Π΄ΠΎΠ΄Π°ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ΅, ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° Π³Π° ΡΡΠ°Π²ΠΈΠΌ Π½Π° ΠΠΈΡΠ₯ΡΠ± Π·Π° ΡΠ»ΠΎΠ±ΠΎΠ΄Π°Π½ ΠΏΡΠΈΡΡΡΠΏ.
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ