ʻO ka hōʻoia maʻamau me ka hoʻohana ʻana i ka pilikia o ka ʻīlio hae, kao a me ke kāpeti

I koʻu manaʻo, ma ka māhele ʻōlelo Lūkini o ka Pūnaewele, ʻaʻole lawa ka uhi ʻia o ke kumuhana o ka hōʻoia maʻamau, a aia nō ka nele o nā hiʻohiʻona maʻalahi a maopopo.

E hāʻawi wau i kumu hoʻohālike mai kahi kumu ʻē aʻe, a hoʻohui i kaʻu hopena ponoʻī i ka pilikia kaulana o ka hele ʻana i kahi ʻīlio hae, kahi kao a me kahi kāpeti i kēlā ʻaoʻao o ka muliwai.

Akā ʻo ka mea mua, e wehewehe pōkole wau i ke ʻano o ka hōʻoia a me ke kumu e pono ai.

ʻO ka hōʻoia maʻamau ʻo ia ka nānā ʻana i kahi papahana a i ʻole algorithm e hoʻohana ana i kekahi.

Pono kēia e hōʻoia i ka hana ʻana o ka papahana e like me ka mea i manaʻo ʻia a no ka hōʻoia ʻana i kona palekana.

ʻO ka hōʻoia maʻamau ka mea ikaika loa e ʻimi a hoʻopau i nā nāwaliwali: hiki iā ʻoe ke ʻimi i nā lua āpau a me nā pōpoki i loko o kahi papahana, a i ʻole e hōʻoia ʻaʻole lākou.
He mea pono e hoʻomaopopo i kekahi mau mea hikiʻole kēia, e like me ka pilikia o nā mō'īwahine 8 me ka laulā papa o 1000 squares: hiki mai nā mea a pau i ka paʻakikī algorithmic a iʻole ka pilikia hoʻomaha.

Eia naʻe, i kekahi hihia, e loaʻa kekahi o nā pane ʻekolu: pololei ka papahana, hewa ʻole, a ʻaʻole hiki ke helu i ka pane.

Inā ʻaʻole hiki ke loaʻa kahi pane, hiki pinepine ke hana hou i nā ʻāpana maopopo ʻole o ka papahana, e hōʻemi ana i kā lākou algorithmic paʻakikī, i mea e loaʻa ai kahi pane ʻae a ʻaʻole paha.

A hoʻohana ʻia ka hōʻoia maʻamau, no ka laʻana, i ka Windows kernel a me Darpa drone operating system, e hōʻoia i ka pae kiʻekiʻe o ka pale.

E hoʻohana mākou i ka Z3Prover, kahi mea hana ikaika loa no ka hōʻoia ʻana i ka theorem automated a me ka hoʻoponopono hoʻohālikelike.

Eia kekahi, hoʻoponopono ʻo Z3 i nā hoʻohālikelike, ʻaʻole koho i kā lākou waiwai me ka hoʻohana ʻana i ka ikaika.
ʻO ia ke ʻano hiki ke loaʻa ka pane, ʻoiai i nā hihia i loaʻa 10^100 hui pū ʻana o nā koho hoʻokomo.

Akā ʻo kēia wale nō ma kahi o hoʻokahi haneli mau manaʻo hoʻokomo o ke ʻano Integer, a ʻike pinepine ʻia kēia ma ka hana.

Pilikia e pili ana i 8 mau mōʻīwahine (Lawe ʻia mai ka ʻōlelo Pelekania manual).

ʻO ka hōʻoia maʻamau me ka hoʻohana ʻana i ka pilikia o ka ʻīlio hae, kao a me ke kāpeti

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

Ke holo nei iā Z3, loaʻa iā mākou ka hopena:

[Q_5 = 1,
 Q_8 = 7,
 Q_3 = 8,
 Q_2 = 2,
 Q_6 = 3,
 Q_4 = 6,
 Q_7 = 5,
 Q_1 = 4]

Hoʻohālikelike ʻia ka pilikia mōʻī wahine me kahi papahana e hoʻokomo i nā hoʻonohonoho o 8 mau mōʻī wahine a hoʻopuka i ka pane inā ua hahau nā mōʻī wahine kekahi i kekahi.

Inā mākou e hoʻoponopono i kahi papahana me ka hoʻohana ʻana i ka hōʻoia maʻamau, a laila e hoʻohālikelike ʻia i ka pilikia, pono mākou e hana i hoʻokahi ʻanuʻu hou i ke ʻano o ka hoʻololi ʻana i ka code program i kahi hoohalike: e huli like ia me kā mākou ( ʻoiaʻiʻo, inā ua kākau pololei ʻia ka papahana).

Aneane like ka mea i ka hihia o ka ʻimi ʻana i nā nāwaliwali: hoʻonohonoho wale mākou i nā kūlana hoʻopuka e pono ai mākou, no ka laʻana, ka password admin, hoʻololi i ke kumu a i ʻole code decompiled i nā hoʻohālikelike kūpono me ka hōʻoia, a laila loaʻa i kahi pane e pili ana i ka mea. pono e hāʻawi ʻia nā ʻikepili i mea hoʻokomo e hoʻokō ai i ka pahuhopu.

I koʻu manaʻo, ʻoi aku ka hoihoi o ka pilikia e pili ana i ka ʻīlio hae, ke kao a me ke kāpeti, ʻoiai ʻo ka hoʻoponopono ʻana i ia mea he nui (7) mau ʻanuʻu.

Inā hoʻohālikelike ka pilikia mōʻīwahine i ka hihia kahi hiki iā ʻoe ke komo i kahi kikowaena me ka hoʻohana ʻana i kahi noi GET a POST hoʻokahi, a laila hōʻike ka ʻīlio hae, kao a me ke kāpeti i kahi hiʻohiʻona mai kahi ʻano paʻakikī a ākea, kahi e hiki ai ke hoʻokō wale ʻia ka pahuhopu. ma kekahi mau noi.

Hoʻohālikelike kēia, no ka laʻana, i kahi hiʻohiʻona kahi e pono ai ʻoe e ʻimi i kahi injection SQL, e kākau i kahi faila ma ia mea, a laila e hoʻokiʻekiʻe i kāu mau kuleana a laila loaʻa kahi ʻōlelo huna.

Nā kūlana o ka pilikia a me kona hoʻonāPono ka mea mahiʻai e lawe i ka ʻīlio hae, ke kao a me ke kāpeti ma kēlā ʻaoʻao o ka muliwai. He waapa ko ka mea mahiai e hiki ai ke hookomo i hookahi mea wale no, koe wale no ka mahiai. ʻAi ka ʻīlio hae i ke kao a ʻai ke kao i ke kāpena inā haʻalele ka mahiʻai iā lākou me ka mālama ʻole ʻia.

ʻO ka hopena, aia ma ka ʻanuʻu 4 pono e hoʻihoʻi ka mahiʻai i ke kao.
I kēia manawa, e hoʻomaka kākou e hoʻoponopono iā ia me ka programmatically.

E hōʻike kākou i ka mahiʻai, ka ʻīlio hae, ke kao, a me ke kāpeti ma ke ʻano he 4 mau hoʻololi e lawe ana i ka waiwai he 0 a i ʻole 1 wale nō.

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

ʻO ka helu ka helu o nā ʻanuʻu e pono ai e hoʻoponopono. Hōʻike kēlā me kēia ʻanuʻu i ke ʻano o ka muliwai, ka waʻa a me nā mea āpau.

I kēia manawa, e koho kāua iā ia me ka palena, e lawe i 10.

Hōʻike ʻia kēlā me kēia hui i 10 kope - ʻo ia kona waiwai ma kēlā me kēia o nā ʻanuʻu 10.

I kēia manawa e hoʻonohonoho i nā kūlana no ka hoʻomaka a me ka hoʻopau.

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 ]

A laila hoʻonoho mākou i nā kūlana kahi e ʻai ai ka ʻīlio hae i ke kao, a i ʻole ke kao e ʻai ai i ke kāpeti, e like me nā kaohi i ka hoʻohālikelike.
(Ma ke alo o kahi mahiʻai, hiki ʻole ke huhū)

# 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) ]

A ʻo ka hope, e wehewehe mākou i nā hana āpau a ka mahiʻai i ka wā e hele ai i laila a i hope paha.
Hiki iā ia ke lawe pū me ia i ka ʻīlio hae, ke kao a i ʻole ke kāpeti, ʻaʻole lawe i kekahi, ʻaʻole hoʻi e holo i kēlā me kēia wahi.

ʻOiaʻiʻo, ʻaʻole hiki i kekahi ke hele me ka ʻole o ka mahiʻai.

E hōʻike ʻia kēia e ka ʻoiaʻiʻo e hiki ke ʻokoʻa kēlā me kēia moku'āina o ka muliwai, ka waʻa a me nā hui mai ka mea ma mua ma kahi ala palena ʻole.

ʻAʻole ʻoi aku ma mua o 2 mau ʻāpana, a me nā palena ʻē aʻe he nui, no ka mea hiki i ka mea mahiʻai ke lawe i hoʻokahi hui i ka manawa a ʻaʻole hiki ke waiho pū ʻia nā mea a pau.

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

E holo kāua i ka hoʻonā.

solve(Side + Start + Finish + Safe + Travel)

A loaʻa iā mākou ka pane!

Ua loaʻa iā Z3 kahi hoʻonohonoho o nā mokuʻāina e hoʻokō i nā kūlana āpau.
He ʻano hoʻolei ʻehā ʻano o ka manawa-manawa.

E noʻonoʻo kākou i ka mea i hana ʻia.

ʻIke mākou i ka hopena i hala nā mea a pau, i ka manawa mua i hoʻoholo ai kā mākou mahiʻai e hoʻomaha, a ma nā ʻanuʻu 2 mua ʻaʻole ʻo ia e ʻau ma nā wahi āpau.

Human_2 = 0
Human_3 = 0

Hōʻike kēia i ka nui o nā mokuʻāina a mākou i koho ai, a ʻo ka 8 e lawa loa.

I ko mākou hihia, hana ka mahiʻai penei: hoʻomaka, hoʻomaha, hoʻomaha, keʻa i ke kao, keʻa hope, keʻa i ke kāpena, hoʻi me ke kao, keʻa i ka'īlio hae, hoʻi hoʻokahi, hāʻawi hou i ke kao.

Akā i ka hopena ua hoʻoholo ʻia ka pilikia.

#Старт.
 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

I kēia manawa e ho'āʻo kāua e hoʻololi i nā kūlana a hōʻoia ʻaʻole he hopena.

No ka hana ʻana i kēia, hāʻawi mākou i kā mākou wolf herbivory, a makemake ʻo ia e ʻai i ke kāpeti.
Hiki ke hoʻohālikelike ʻia kēia me ka hihia kahi o kā mākou pahuhopu e hoʻopaʻa i ka noi a pono mākou e hōʻoia i ka loaʻa ʻole o nā loopholes.

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

Hāʻawi ʻo Z3 iā mākou i kēia pane:

 no solution

ʻO ia hoʻi, ʻaʻohe ʻano hoʻonā.

No laila, ua hōʻike mākou ma ka papahana i ka hiki ʻole ke hele me ka ʻīlio hae omnivorous me ka pohō ʻole o ka mea mahiʻai.

Inā ʻike ka poʻe i kēia kumuhana he hoihoi, a laila ma nā ʻatikala e hiki mai ana e haʻi aku wau iā ʻoe pehea e hoʻohuli ai i kahi papahana maʻamau a i ʻole hana i kahi hoʻohālikelike kūpono me nā ʻano hana maʻamau, a hoʻoponopono iā ia, a laila e hōʻike ana i nā hiʻohiʻona kūpono a me nā nāwaliwali. ʻO ka mea mua, ma ka hana hoʻokahi, akā hōʻike ʻia ma ke ʻano o kahi papahana, a laila e hoʻopiʻi mālie a neʻe i nā hiʻohiʻona o kēia manawa mai ka honua o ka hoʻomohala polokalamu.

Ua mākaukau ka ʻatikala aʻe:
Ke hana ʻana i kahi ʻōnaehana hōʻoia maʻamau mai ka wā ʻōpala: Ke kākau ʻana i kahi VM hōʻailona ma PHP a me Python

I loko o laila au e neʻe mai ka hōʻoia maʻamau o nā pilikia i nā papahana, a wehewehe
pehea e hiki ai ke hoʻololi ʻia i mau ʻōnaehana kānāwai maʻamau.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka