เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ เด’เดฐเต เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดญเดพเด—เด‚ 1: PHP, Python เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เตเดฏเดพเดฐเด•เตเดŸเตผ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป

เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เดŽเดจเตเดจเดคเต เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเตŠเดจเตเดจเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต.

เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเต‹ เด…เดต เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเต†เดจเตเดจเต เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เดพเดจเต‹ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดเดฑเตเดฑเดตเตเด‚ เดถเด•เตเดคเดฎเดพเดฏ เดฐเต€เดคเดฟเด•เดณเดฟเตฝ เด’เดจเตเดจเดพเดฃเดฟเดคเต.

เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเดฃเด‚ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเด‚ เดšเต†เดจเตเดจเดพเดฏ, เด†เดŸเต, เด•เดพเดฌเต‡เดœเต เดŽเดจเตเดฑเต† เดฎเตเตป เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเดพเตป เดชเตเดฐเดถเตเดจเด™เตเด™เดณเตเดŸเต† เด”เดชเดšเดพเดฐเดฟเด• เดชเดฐเดฟเดถเต‹เดงเดจเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด™เตเด™เตเด•เดฏเตเด‚ เดŽเด™เตเด™เดจเต†เดฏเต†เดจเตเดจเต เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต
เด…เดต เดŽเด™เตเด™เดจเต† เดธเตเดตเดฏเดฎเต‡เดต เด”เดชเดšเดพเดฐเดฟเด• เดจเดฟเดฏเดฎ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เดณเดพเด•เตเด•เดฟ เดฎเดพเดฑเตเดฑเดพเด‚.

เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• เดคเดคเตเดตเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเดพเตป เด’เดฐเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเดฑเต† เดธเตเดตเดจเตเดคเด‚ เด…เดจเดฒเต‹เด—เต เดŽเดดเตเดคเดฟ.

เด‡เดคเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต‹เดกเต เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด…เดคเดฟเดจเต† เด’เดฐเต เดธเดฎเดตเดพเด•เตเดฏ เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต (SMT) เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเต เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดพเดฑเตเดฑเดฟเด•เต เด†เดฏเดฟ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เด‡เตปเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดถเดฟเดฅเดฟเดฒเดฎเดพเดฏเดฟ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ,
เด…เดคเต เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดšเตเดฐเตเด•เตเด•เดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚.

เดธเดฟเด‚เดฌเต‹เดณเดฟเด•เต เด•เด‚เดชเตเดฏเต‚เดŸเตเดŸเต‡เดทเตป เดŽเดจเตเดจเดคเต เดตเดฟเดถเดพเดฒเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด’เดฐเต‡เดธเดฎเดฏเด‚ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดฎเดพเตผเด—เดฎเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เด”เดชเดšเดพเดฐเดฟเด• เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดงเดพเดจ เด‰เดชเด•เดฐเดฃเดตเตเดฎเดพเดฃเต.

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด†เดฆเตเดฏเดคเตเดคเต† เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเดฟเดจเต เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดŽเดŸเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด‡เตปเดชเตเดŸเตเดŸเต เดตเตเดฏเดตเดธเตเดฅเด•เตพ, เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดจเต†เด—เดฑเตเดฑเต€เดตเต, เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดชเต‚เดœเตเดฏเด‚, เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, 42 เดŽเดจเตเดจเดฟเดต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเด‚.

เด’เดฐเต เดฑเดฃเตเดฃเดฟเดฒเต† เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เตพ เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดซเดฒเด‚ เดจเต‡เดŸเดพเตป เด•เดดเดฟเดฏเตเดฎเต‹ เดŽเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด‰เดคเตเดคเดฐเดตเตเด‚ เด…เดคเตเดคเดฐเด‚ เด‡เตปเดชเตเดŸเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เดธเต†เดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเดตเตเด‚ เดจเตฝเด•เตเด‚. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเตเดคเดฐเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‡เดฒเตเดฒ เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดคเต†เดณเดฟเดตเต.

เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดธเดพเดงเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเดฒเตเด‚ เดจเดฎเตเด•เตเด•เต เด‡เตปเดชเตเดŸเตเดŸเต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด•เต‚เดŸเดพเดคเต† เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดฎเดพเดคเตเดฐเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผ เดชเดพเดธเตเดตเต‡เดกเต.

เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เดžเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเดฑเตเดŸเต† เดชเดพเดธเตโ€Œเดตเต‡เดกเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฃเต†เดจเตเดจเดคเดฟเดจเต เดคเต†เดณเดฟเดตเต เดฒเดญเดฟเด•เตเด•เตเด‚.

เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด‡เตปเดชเตเดŸเตเดŸเต เดกเดพเดฑเตเดฑเดฏเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เด•เตเดฒเดพเดธเดฟเด•เตเด•เตฝ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เต‡เดธเดพเดฃเต†เดจเตเดจเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต.

เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเดฑเต† เดŽเดฎเตเดฒเต‡เดทเตป เดฎเต‹เดกเดฟเดฒเตเด‚ เดŽเดจเตเดฑเต† เดชเตเดฐเดคเต€เด•เด‚ VM เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดฎเตเดฎเตเดชเดคเตเดคเต† เดฒเต‡เด–เดจเดคเตเดคเดฟเดฒเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ, เด”เดชเดšเดพเดฐเดฟเด•เดฎเดพเดฏ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดจเตเดฏเดพเดฏเดฎเดพเดฏ เดตเดฟเดฎเตผเดถเดจเด‚ เด…เดคเดฟเดจเตเดฑเต† เดฆเต—เตผเดฌเดฒเตเดฏเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดšเตผเดšเตเดšเดฏเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚.

เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด‡เดตเดฏเดพเดฃเต:

  1. เด”เดชเดšเดพเดฐเดฟเด•เดฎเดพเดฏ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เด†เดคเตเดฏเดจเตเดคเดฟเด•เดฎเดพเดฏเดฟ P=NP เดฒเต‡เด•เตเด•เต เดตเดฐเตเดจเตเดจเดคเดฟเดจเดพเตฝ เดธเด‚เดฏเต‹เดœเดฟเดค เดธเตเดซเต‹เดŸเดจเด‚
  2. เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเด‚, เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เตเด•เตพ, เดฎเดฑเตเดฑเต เดฌเดพเดนเตเดฏ เดธเด‚เดญเดฐเดฃเด‚ เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด•เต‹เดณเตเด•เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต
  3. เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต† เดฌเด—เตเด•เตพ, เด‰เดชเดญเต‹เด•เตเดคเดพเดตเต‹ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฑเต‹ เด’เดฐเต เด•เดพเดฐเตเดฏเด‚ เด‰เดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŽเดจเตเดจเดพเตฝ เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด…เดคเต เดตเต‡เดฃเตเดŸเดคเตเดฐ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฒเตเดฒ.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เดธเตเดฐเดทเตโ€ŒเดŸเดพเด•เตเด•เตพ เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดคเดฟเด•เดšเตเดšเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เด”เดชเดšเดพเดฐเดฟเด•เดฎเดพเดฏ เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เดžเดพเตป เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดžเดพเตป เด‡เดชเตเดชเต‹เตพ เดšเตเดตเดฐเดฟเตฝ เดคเดฒ เด•เตเดจเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ, เด•เต‚เดŸเดพเดคเต† เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเตเด‚ เดฌเดพเดนเตเดฏ เด•เต‹เดณเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเดตเตเด‚ เด•เตเดฑเดตเตเดณเตเดณ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด‚.

เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เตพ เดˆ เด†เดตเดถเตเดฏเด•เดคเด•เตพเด•เตเด•เต เดเดฑเตเดฑเดตเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏเดคเดฟเดจเดพเตฝ, เดตเต‡เดตเตเดธเต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฑเตˆเดกเต เด•เดฐเดพเดฑเตเด•เดณเดฟเตฝ เดšเต‹เดฏเตโ€Œเดธเต เดตเดจเตเดจเต: เด…เดต เดŸเตเดฏเต‚เดฑเดฟเด‚เด—เต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เด…เดตเดฏเตเดŸเต† เดชเดฐเดฎเดพเดตเดงเดฟ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด•เตƒเดคเตเดฐเดฟเดฎเดฎเดพเดฏเดฟ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดŽเดจเตเดจเดพเตฝ เดžเด™เตเด™เตพ เด…เดต เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดถเดคเตเดคเตเดจเดฟเดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด‚.

เดŽเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเด‚ เดชเตเดฑเดฎเต‡, เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด•เดฐเดพเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃเด‚ เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚ เด†เดตเดถเตเดฏเด•เตเด•เดพเดฐเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚: เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ เด’เดฐเต เด•เดฐเดพเตผ เดชเดฟเดถเด•เต เดคเดฟเดฐเตเดคเตเดคเตเดจเตเดจเดคเต เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต.
เด…เดคเตเดคเดฐเด‚ เดชเดฟเดถเด•เตเด•เดณเตเดŸเต† เดตเดฟเดฒ เดตเดณเดฐเต† เด‰เดฏเตผเดจเตเดจเดคเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เด•เดพเดฐเดฃเด‚ เดตเดณเดฐเต† เดตเดฒเดฟเดฏ เด…เดณเดตเดฟเดฒเตเดณเตเดณ เดซเดฃเตเดŸเตเด•เตพ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เดณเดฟเตฝ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เดŽเดจเตเดฑเต† เดธเดฟเด‚เดฌเต‹เดณเดฟเด•เต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป PHP, Python เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ SMT เดซเต‹เตผเดฎเตเดฒเด•เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป Microsoft เดฑเดฟเดธเตผเดšเตเดšเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ Z3Prover เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดคเดฟเดจเตเดฑเต† เด•เดพเดคเตฝ เดถเด•เตเดคเดฎเดพเดฏ เด’เดฐเต เดฎเตพเดŸเตเดŸเดฟ-เด‡เดŸเดชเดพเดŸเต เดคเดฟเดฐเดฏเดฒเดพเดฃเต, เด…เดคเต
เดจเดฟเดฐเดตเดงเดฟ เด‡เดŸเดชเดพเดŸเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเดพเดฒเตเด‚, เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเต‹ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเต‹ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.
เดชเต‹เดฒเตเด‚ เดฎเตˆเดฅเดฟเตฝ, Ethereum เด•เต‡เดŸเตเดชเดพเดŸเตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดถเด•เตเดคเดฎเดพเดฏ เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเตเด•เดณเดฟเตฝ เด’เดจเตเดจเต, เด•เตเดฑเดšเตเดšเต เดฎเดพเดธเด™เตเด™เตพเด•เตเด•เต เดฎเตเดฎเตเดชเต เดˆ เด•เดดเดฟเดตเต เดšเต‡เตผเดคเตเดคเต.

เดŽเดจเตเดจเดพเตฝ เดˆเดคเตผ เด•เดฐเดพเดฑเตเด•เตพ เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดตเตเด‚ เดŸเตเดฏเต‚เดฑเดฟเด‚เด—เต เดชเต‚เตผเดฃเตเดฃเดตเตเดฎเดพเดฃเต เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต.

RIDE เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเดฟเดจเตเดฑเต† เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเต เด’เดฐเต เดชเตˆเดคเตเดคเตบ เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต PHP เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดคเดฟเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ Z3 SMT-เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เด•เต‹เตบเดŸเตเดฐเดพเด•เตเดŸเต เดธเตเดฑเตเดฑเต‡เดฑเตเดฑเตเด•เดณเตเด‚ เด…เดตเดฏเตเดŸเต† เดธเด‚เด•เตเดฐเดฎเดฃเดคเตเดคเดฟเดจเตเดณเตเดณ เดตเตเดฏเดตเดธเตเดฅเด•เดณเตเด‚ เด†เดฏเดฟ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต:

เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ เด’เดฐเต เด”เดชเดšเดพเดฐเดฟเด• เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดญเดพเด—เด‚ 1: PHP, Python เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด•เตเดฏเดพเดฐเด•เตเดŸเตผ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป

เด‰เดณเตเดณเดฟเตฝ เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚.

เดŽเดจเตเดจเดพเตฝ เด†เดฆเตเดฏเด‚, เดฑเตˆเดกเต เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเตผ เดญเดพเดทเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เตเดฑเดšเตเดšเต เดตเดพเด•เตเด•เตเด•เตพ.

เดฐเต‚เดชเด•เดฒเตเดชเดจเดฏเดฟเตฝ เด…เดฒเดธเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเดชเดฐเดตเตเด‚ เด†เดตเดฟเดทเตเด•เดพเดฐเดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเตเดฎเดพเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เดญเดพเดทเดฏเดพเดฃเดฟเดคเต.
เดฌเตเดฒเต‹เด•เตเด•เตโ€Œเดšเต†เดฏเดฟเดจเดฟเดจเตเดณเตเดณเดฟเตฝ เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดŸ เดจเดฟเดฒเดฏเดฟเดฒเดพเดฃเต RIDE เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดตเดพเดฒเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเดจเตเด‚ เดŽเดดเตเดคเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚.

เด“เดฐเต‹ เดตเดพเดฒเดฑเตเดฑเดฟเดฒเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฑเตˆเดกเต เด•เดฐเดพเตผ เด…เดฑเตเดฑเดพเดšเตเดšเตเดšเต†เดฏเตเดฏเดพเด‚, เด•เต‚เดŸเดพเดคเต† เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดซเดฒเด‚ เดถเดฐเดฟเดฏเต‹ เดคเต†เดฑเตเดฑเต‹ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

TRUE เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเตผ เด‡เดŸเดชเดพเดŸเต เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, FALSE เดŽเดจเตเดจเดพเตฝ เด…เดคเต เดจเดฟเดฐเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดพเดฃเต.
เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚: เดตเดพเดฒเดฑเตเดฑเต เดฌเดพเดฒเตปเดธเต 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

}

PHP เด†เดฆเตเดฏเด‚ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเด‚ เด…เดตเดฏเตเดŸเต† เด•เต€เด•เดณเตเดŸเต†เดฏเตเด‚ เด…เดจเตเดฌเดจเตเดง เดฌเต‚เดณเดฟเดฏเตป เดŽเด•เตเดธเตเดชเตเดฐเดทเตป เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเตเดฑเต†เดฏเตเด‚ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดจเตเดจเต.

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

PHP เดชเดฟเดจเตเดจเต€เดŸเต เด…เดตเดฏเต† เดชเตˆเดคเตเดคเดฃเดฟเดฒเต† Z3Prover SMT-เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดตเดฟเดตเดฐเดฃเดฎเดพเดฏเดฟ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
เดกเดพเดฑเตเดฑ เด’เดฐเต เดฒเต‚เดชเตเดชเดฟเตฝ เดชเตŠเดคเดฟเดžเตเดžเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเดฟเดŸเต† เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพเด•เตเด•เต เดธเต‚เดšเดฟเด• i, เดŸเตเดฐเดพเตปเดธเดพเด•เตเดทเตป เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดธเต‚เดšเดฟเด• i + 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] )  

เดชเตˆเดคเตเดคเดฃเดฟเดฒเต† SMT เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เดพเตป เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดค เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดตเตเดฏเดตเดธเตเดฅเด•เตพ เด…เดŸเตเด•เตเด•เดฟ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต.

เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต


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()
 


เดฎเตเดดเตเดตเตป เดถเตƒเด‚เด–เดฒเดฏเดฟเดฒเต†เดฏเตเด‚ เด…เดตเดธเดพเดจ เดธเด‚เดธเตเดฅเดพเดจเดคเตเดคเดฟเดจเต, เดŸเตเดฐเดพเตปเดธเตเดซเตผ เด‡เดŸเดชเดพเดŸเต เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดจเดฟเดฏเดฎเด™เตเด™เตพ เดฌเดพเดงเด•เดฎเดพเดฃเต.

เด•เดฐเดพเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเดฃเด‚ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเตป เด†เดคเตเดฏเดจเตเดคเดฟเด•เดฎเดพเดฏเดฟ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด…เดคเตเดคเดฐเด‚ เดตเตเดฏเดตเดธเตเดฅเด•เตพเด•เตเด•เดพเดฏเดฟ Z3Prover เดจเต‹เด•เตเด•เตเด‚ เดŽเดจเตเดจเดพเดฃเต เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เด•เดฐเดพเดฑเดฟเดจเตเดฑเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเดฏ SMT เดฎเต‹เดกเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเดฏเดฎเต‡เดต เดฒเดญเดฟเด•เตเด•เตเด‚.
เดžเดพเตป เดธเตเดตเดฎเต‡เดงเดฏเดพ เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เดŽเดจเตเดฑเต† เดฎเตเตป เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเต‹เดกเดฒเตเดฎเดพเดฏเดฟ เด‡เดคเต เดตเดณเดฐเต† เดธเดพเดฎเตเดฏเดฎเตเดณเตเดณเดคเดพเดฃเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต


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()
 


เดธเดฎเดพเดฐเด‚เดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, Z3Prover เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเตผ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเดฃเด‚ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด‡เดŸเดชเดพเดŸเตเด•เดณเตเดŸเต† เด’เดฐเต เดถเตƒเด‚เด–เดฒ เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

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

}

เด‡เดคเต เด†เดฆเตเดฏ เดชเดคเดฟเดชเตเดชเดพเดฏเดคเดฟเดจเดพเตฝ, เดตเดพเด•เตเดฏเด˜เดŸเดจ เดตเดณเดฐเต† เดชเดฐเดฟเดฎเดฟเดคเดฎเดพเดฃเต เด•เต‚เดŸเดพเดคเต† เดฌเด—เตเด•เตพ เด‰เดฃเตเดŸเดพเด•เดพเด‚.
เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฒเต‡เด–เดจเด™เตเด™เดณเดฟเตฝ, เดตเดฟโ€ŒเดŽเดฎเตเดฎเดฟเดจเตเดฑเต† เด•เต‚เดŸเตเดคเตฝ เดตเดฟเด•เดธเดจเด‚ เด•เดตเตผ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเด™เตเด™เดจเต† เด”เดชเดšเดพเดฐเดฟเด•เดฎเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดš เดธเตโ€ŒเดฎเดพเตผเดŸเตเดŸเต เด•เดฐเดพเดฑเตเด•เตพ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเตเด‚ เด•เดพเดฃเดฟเด•เตเด•เดพเตป เดžเดพเตป เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดจเตเดจเต, เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ เด…เดต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ.

เด…เด•เตเดทเดฐ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เด‡เดตเดฟเดŸเต† เดฒเดญเตเดฏเดฎเดพเดฃเต http://2.59.42.98/hyperbox/
เดชเตเดฐเดคเต€เด•เดพเดคเตเดฎเด• VM-เดจเตเดฑเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด•เตเดฐเดฎเต€เด•เดฐเดฟเดšเตเดšเต เด…เดตเดฟเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เดšเต‡เตผเดคเตเดค เดถเต‡เดทเด‚, เดธเต—เดœเดจเตเดฏ เด†เด•เตโ€Œเดธเดธเตเดธเดฟเดจเดพเดฏเดฟ เด…เดคเต GitHub-เตฝ เด‡เดŸเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•