Wolfsheep improved
This commit is contained in:
parent
d0881dabdf
commit
98d5c95973
1 changed files with 5 additions and 5 deletions
10
wolfsheep.py
10
wolfsheep.py
|
@ -17,8 +17,9 @@ class Model:
|
||||||
return ",".join(self.left) + " <-> " + ",".join(self.right)
|
return ",".join(self.left) + " <-> " + ",".join(self.right)
|
||||||
|
|
||||||
class Simulator:
|
class Simulator:
|
||||||
|
invalid_states = [ set({Model.Wolf,Model.Sheep}), set({Model.Sheep, Model.Cabbage}) ]
|
||||||
|
|
||||||
def simulate(self, state, stack=[]):
|
def simulate(self, state, stack=[]):
|
||||||
#stack.append(state)
|
|
||||||
stack = stack + [state]
|
stack = stack + [state]
|
||||||
if state.right == set([Model.Man,Model.Wolf,Model.Sheep,Model.Cabbage]):
|
if state.right == set([Model.Man,Model.Wolf,Model.Sheep,Model.Cabbage]):
|
||||||
return stack
|
return stack
|
||||||
|
@ -32,12 +33,11 @@ class Simulator:
|
||||||
nextStates.append( Model(state.left | set([Model.Man, obj]) , state.right - set([Model.Man,obj]) ) )
|
nextStates.append( Model(state.left | set([Model.Man, obj]) , state.right - set([Model.Man,obj]) ) )
|
||||||
|
|
||||||
nextStates = list(filter(
|
nextStates = list(filter(
|
||||||
lambda s: s not in stack and not(
|
lambda s: not(
|
||||||
( (set([Model.Wolf,Model.Sheep]) <= s.left or set([Model.Sheep, Model.Cabbage]) <= s.left) and Model.Man not in s.left ) or
|
s in stack or
|
||||||
( (set([Model.Wolf,Model.Sheep]) <= s.right or set([Model.Sheep, Model.Cabbage]) <= s.right) and Model.Man not in s.right )
|
any([ any([ invalid_state <= m for invalid_state in Simulator.invalid_states ]) and Model.Man not in m for m in [s.left,s.right] ])
|
||||||
)
|
)
|
||||||
, nextStates)) #Remove invalid and previous states.
|
, nextStates)) #Remove invalid and previous states.
|
||||||
#print("%s: %s\nstack: %s" % (state,nextStates,stack))
|
|
||||||
|
|
||||||
for s in nextStates:
|
for s in nextStates:
|
||||||
m = self.simulate(s,stack)
|
m = self.simulate(s,stack)
|
||||||
|
|
Loading…
Reference in a new issue