goal: you have a empty 5 gallon and 3 gallon buckets with an unlimited
water source, how can you get exactly 4 gallons?
There are two possible ways:
four gallons in the 5 bucket: [4, 0]:['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3']
one gallon in the 5 and three in the 3: [1, 3]:['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3']
Here is python code that solves it:
buckets.python.txt
You can cut and paste the code on the web here: https://repl.it/languages/python3
# capacity 5,3
cap = [5,3]
# state 5,3 current levels, start at [0,0]
start = [0,0]
# define goal of 4 gallons
goal = lambda xx: xx[0]+xx[1]==4
print( "================================")
print( "capacities cap", cap)
print( "start", start)
print( "goal xx[0]+xx[1]==4")
print( "================================")
################################
# actions
def fill5(state):
return([cap[0],state[1]])
def empty5(state):
return([0,state[1]])
def fill3(state):
return([state[0],cap[1]])
def empty3(state):
return([state[0],0])
def xfer53(state):
# you can transfer min of what is in 5 into what is empty in 3
d = min( state[0], cap[1]-state[1])
return([ state[0]-d, state[1]+d])
def xfer35(state):
# you can transfer min of what is in 3 into what is empty in 5
d = min( state[1], cap[0]-state[0])
return([ state[0]+d, state[1]-d])
# associate name with function for ease of calling
action={"fill5": fill5, "fill3": fill3, "empty5": empty5, "empty3": empty3, "xfer53": xfer53, "xfer35": xfer35}
################################
# start the exploration at start
state = start
toexp = [ state ]
# store what we've seen
store = dict()
storekey = lambda xx: str(xx) # lists can't be keys so use string
store[ storekey(state) ] = ["start"]
# store all achieved goals
goallist = []
# breadth first search loop
while len(toexp)>0:
# get the first item on list
state = toexp[0]
toexp= toexp[1:] # not efficient using list for queue
print( "---- exploring state", state, "--------------------------------")
# are we there?
if goal(state):
print( "!!!!goal!!!!", state, store[storekey(state)])
goallist.append(str(state)+":"+str(store[storekey(state)]))
# explore all actions in order in this state
for name in action.keys():
tryit = action[name](state)
print( ">>tryit", state, name, tryit)
if storekey(tryit) not in store:
tostore = store[storekey(state)] + [name] # returns new list so store[state] is unchanged as desired
store[storekey(tryit)] = tostore
# newly seen to explore it
toexp.append(tryit)
print( ">>>storing", tryit, "=", tostore)
else:
tostore = store[storekey(state)]+ [name] # returns new list so store[state] is unchanged as desired
print( ">>>already stored", tryit, "=", store[storekey(tryit)], "not updating to", tostore)
print( "---- toexplore", toexp)
print( "**** all possible configurations")
for (k,v) in store.items():
print( "store", k, v)
print( "**** all ways to get goal")
for gg in goallist:
print( gg)
================================
Here is the output:
mpsb@mpsb-All-Series:~/Desktop/buckets$ python buckets.py
================================
('capacities cap', [5, 3])
('start', [0, 0])
goal xx[0]+xx[1]==4
================================
('---- exploring state', [0, 0], '--------------------------------')
('>>tryit', [0, 0], 'fill5', [5, 0])
('>>>storing', [5, 0], '=', ['start', 'fill5'])
('>>tryit', [0, 0], 'empty5', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'empty5'])
('>>tryit', [0, 0], 'empty3', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'empty3'])
('>>tryit', [0, 0], 'fill3', [0, 3])
('>>>storing', [0, 3], '=', ['start', 'fill3'])
('>>tryit', [0, 0], 'xfer53', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'xfer53'])
('>>tryit', [0, 0], 'xfer35', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'xfer35'])
('---- toexplore', [[5, 0], [0, 3]])
('---- exploring state', [5, 0], '--------------------------------')
('>>tryit', [5, 0], 'fill5', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'fill5'])
('>>tryit', [5, 0], 'empty5', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill5', 'empty5'])
('>>tryit', [5, 0], 'empty3', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'empty3'])
('>>tryit', [5, 0], 'fill3', [5, 3])
('>>>storing', [5, 3], '=', ['start', 'fill5', 'fill3'])
('>>tryit', [5, 0], 'xfer53', [2, 3])
('>>>storing', [2, 3], '=', ['start', 'fill5', 'xfer53'])
('>>tryit', [5, 0], 'xfer35', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer35'])
('---- toexplore', [[0, 3], [5, 3], [2, 3]])
('---- exploring state', [0, 3], '--------------------------------')
('>>tryit', [0, 3], 'fill5', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill3', 'fill5'])
('>>tryit', [0, 3], 'empty5', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'empty5'])
('>>tryit', [0, 3], 'empty3', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill3', 'empty3'])
('>>tryit', [0, 3], 'fill3', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'fill3'])
('>>tryit', [0, 3], 'xfer53', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer53'])
('>>tryit', [0, 3], 'xfer35', [3, 0])
('>>>storing', [3, 0], '=', ['start', 'fill3', 'xfer35'])
('---- toexplore', [[5, 3], [2, 3], [3, 0]])
('---- exploring state', [5, 3], '--------------------------------')
('>>tryit', [5, 3], 'fill5', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'fill3', 'fill5'])
('>>tryit', [5, 3], 'empty5', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill5', 'fill3', 'empty5'])
('>>tryit', [5, 3], 'empty3', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'fill3', 'empty3'])
('>>tryit', [5, 3], 'fill3', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'fill3', 'fill3'])
('>>tryit', [5, 3], 'xfer53', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'fill3', 'xfer53'])
('>>tryit', [5, 3], 'xfer35', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'fill3', 'xfer35'])
('---- toexplore', [[2, 3], [3, 0]])
('---- exploring state', [2, 3], '--------------------------------')
('>>tryit', [2, 3], 'fill5', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'fill5'])
('>>tryit', [2, 3], 'empty5', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty5'])
('>>tryit', [2, 3], 'empty3', [2, 0])
('>>>storing', [2, 0], '=', ['start', 'fill5', 'xfer53', 'empty3'])
('>>tryit', [2, 3], 'fill3', [2, 3])
('>>>already stored', [2, 3], '=', ['start', 'fill5', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'fill3'])
('>>tryit', [2, 3], 'xfer53', [2, 3])
('>>>already stored', [2, 3], '=', ['start', 'fill5', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'xfer53'])
('>>tryit', [2, 3], 'xfer35', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'xfer35'])
('---- toexplore', [[3, 0], [2, 0]])
('---- exploring state', [3, 0], '--------------------------------')
('>>tryit', [3, 0], 'fill5', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill5'])
('>>tryit', [3, 0], 'empty5', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill3', 'xfer35', 'empty5'])
('>>tryit', [3, 0], 'empty3', [3, 0])
('>>>already stored', [3, 0], '=', ['start', 'fill3', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'empty3'])
('>>tryit', [3, 0], 'fill3', [3, 3])
('>>>storing', [3, 3], '=', ['start', 'fill3', 'xfer35', 'fill3'])
('>>tryit', [3, 0], 'xfer53', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'xfer53'])
('>>tryit', [3, 0], 'xfer35', [3, 0])
('>>>already stored', [3, 0], '=', ['start', 'fill3', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'xfer35'])
('---- toexplore', [[2, 0], [3, 3]])
('---- exploring state', [2, 0], '--------------------------------')
('>>tryit', [2, 0], 'fill5', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'fill5'])
('>>tryit', [2, 0], 'empty5', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'empty5'])
('>>tryit', [2, 0], 'empty3', [2, 0])
('>>>already stored', [2, 0], '=', ['start', 'fill5', 'xfer53', 'empty3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'empty3'])
('>>tryit', [2, 0], 'fill3', [2, 3])
('>>>already stored', [2, 3], '=', ['start', 'fill5', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'fill3'])
('>>tryit', [2, 0], 'xfer53', [0, 2])
('>>>storing', [0, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53'])
('>>tryit', [2, 0], 'xfer35', [2, 0])
('>>>already stored', [2, 0], '=', ['start', 'fill5', 'xfer53', 'empty3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer35'])
('---- toexplore', [[3, 3], [0, 2]])
('---- exploring state', [3, 3], '--------------------------------')
('>>tryit', [3, 3], 'fill5', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'fill5'])
('>>tryit', [3, 3], 'empty5', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'empty5'])
('>>tryit', [3, 3], 'empty3', [3, 0])
('>>>already stored', [3, 0], '=', ['start', 'fill3', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'empty3'])
('>>tryit', [3, 3], 'fill3', [3, 3])
('>>>already stored', [3, 3], '=', ['start', 'fill3', 'xfer35', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'fill3'])
('>>tryit', [3, 3], 'xfer53', [3, 3])
('>>>already stored', [3, 3], '=', ['start', 'fill3', 'xfer35', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer53'])
('>>tryit', [3, 3], 'xfer35', [5, 1])
('>>>storing', [5, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35'])
('---- toexplore', [[0, 2], [5, 1]])
('---- exploring state', [0, 2], '--------------------------------')
('>>tryit', [0, 2], 'fill5', [5, 2])
('>>>storing', [5, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5'])
('>>tryit', [0, 2], 'empty5', [0, 2])
('>>>already stored', [0, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'empty5'])
('>>tryit', [0, 2], 'empty3', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'empty3'])
('>>tryit', [0, 2], 'fill3', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill3'])
('>>tryit', [0, 2], 'xfer53', [0, 2])
('>>>already stored', [0, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'xfer53'])
('>>tryit', [0, 2], 'xfer35', [2, 0])
('>>>already stored', [2, 0], '=', ['start', 'fill5', 'xfer53', 'empty3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'xfer35'])
('---- toexplore', [[5, 1], [5, 2]])
('---- exploring state', [5, 1], '--------------------------------')
('>>tryit', [5, 1], 'fill5', [5, 1])
('>>>already stored', [5, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'fill5'])
('>>tryit', [5, 1], 'empty5', [0, 1])
('>>>storing', [0, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5'])
('>>tryit', [5, 1], 'empty3', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty3'])
('>>tryit', [5, 1], 'fill3', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'fill3'])
('>>tryit', [5, 1], 'xfer53', [3, 3])
('>>>already stored', [3, 3], '=', ['start', 'fill3', 'xfer35', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'xfer53'])
('>>tryit', [5, 1], 'xfer35', [5, 1])
('>>>already stored', [5, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'xfer35'])
('---- toexplore', [[5, 2], [0, 1]])
('---- exploring state', [5, 2], '--------------------------------')
('>>tryit', [5, 2], 'fill5', [5, 2])
('>>>already stored', [5, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'fill5'])
('>>tryit', [5, 2], 'empty5', [0, 2])
('>>>already stored', [0, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'empty5'])
('>>tryit', [5, 2], 'empty3', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'empty3'])
('>>tryit', [5, 2], 'fill3', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'fill3'])
('>>tryit', [5, 2], 'xfer53', [4, 3])
('>>>storing', [4, 3], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53'])
('>>tryit', [5, 2], 'xfer35', [5, 2])
('>>>already stored', [5, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer35'])
('---- toexplore', [[0, 1], [4, 3]])
('---- exploring state', [0, 1], '--------------------------------')
('>>tryit', [0, 1], 'fill5', [5, 1])
('>>>already stored', [5, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'fill5'])
('>>tryit', [0, 1], 'empty5', [0, 1])
('>>>already stored', [0, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'empty5'])
('>>tryit', [0, 1], 'empty3', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'empty3'])
('>>tryit', [0, 1], 'fill3', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'fill3'])
('>>tryit', [0, 1], 'xfer53', [0, 1])
('>>>already stored', [0, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer53'])
('>>tryit', [0, 1], 'xfer35', [1, 0])
('>>>storing', [1, 0], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35'])
('---- toexplore', [[4, 3], [1, 0]])
('---- exploring state', [4, 3], '--------------------------------')
('>>tryit', [4, 3], 'fill5', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'fill5'])
('>>tryit', [4, 3], 'empty5', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty5'])
('>>tryit', [4, 3], 'empty3', [4, 0])
('>>>storing', [4, 0], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3'])
('>>tryit', [4, 3], 'fill3', [4, 3])
('>>>already stored', [4, 3], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'fill3'])
('>>tryit', [4, 3], 'xfer53', [4, 3])
('>>>already stored', [4, 3], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'xfer53'])
('>>tryit', [4, 3], 'xfer35', [5, 2])
('>>>already stored', [5, 2], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'xfer35'])
('---- toexplore', [[1, 0], [4, 0]])
('---- exploring state', [1, 0], '--------------------------------')
('>>tryit', [1, 0], 'fill5', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill5'])
('>>tryit', [1, 0], 'empty5', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'empty5'])
('>>tryit', [1, 0], 'empty3', [1, 0])
('>>>already stored', [1, 0], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'empty3'])
('>>tryit', [1, 0], 'fill3', [1, 3])
('>>>storing', [1, 3], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3'])
('>>tryit', [1, 0], 'xfer53', [0, 1])
('>>>already stored', [0, 1], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'xfer53'])
('>>tryit', [1, 0], 'xfer35', [1, 0])
('>>>already stored', [1, 0], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'xfer35'])
('---- toexplore', [[4, 0], [1, 3]])
('---- exploring state', [4, 0], '--------------------------------')
('!!!!goal!!!!', [4, 0], ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3'])
('>>tryit', [4, 0], 'fill5', [5, 0])
('>>>already stored', [5, 0], '=', ['start', 'fill5'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3', 'fill5'])
('>>tryit', [4, 0], 'empty5', [0, 0])
('>>>already stored', [0, 0], '=', ['start'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3', 'empty5'])
('>>tryit', [4, 0], 'empty3', [4, 0])
('>>>already stored', [4, 0], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3', 'empty3'])
('>>tryit', [4, 0], 'fill3', [4, 3])
('>>>already stored', [4, 3], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3', 'fill3'])
('>>tryit', [4, 0], 'xfer53', [1, 3])
('>>>already stored', [1, 3], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3', 'xfer53'])
('>>tryit', [4, 0], 'xfer35', [4, 0])
('>>>already stored', [4, 0], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3'], 'not updating to', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3', 'xfer35'])
('---- toexplore', [[1, 3]])
('---- exploring state', [1, 3], '--------------------------------')
('!!!!goal!!!!', [1, 3], ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3'])
('>>tryit', [1, 3], 'fill5', [5, 3])
('>>>already stored', [5, 3], '=', ['start', 'fill5', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3', 'fill5'])
('>>tryit', [1, 3], 'empty5', [0, 3])
('>>>already stored', [0, 3], '=', ['start', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3', 'empty5'])
('>>tryit', [1, 3], 'empty3', [1, 0])
('>>>already stored', [1, 0], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3', 'empty3'])
('>>tryit', [1, 3], 'fill3', [1, 3])
('>>>already stored', [1, 3], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3', 'fill3'])
('>>tryit', [1, 3], 'xfer53', [1, 3])
('>>>already stored', [1, 3], '=', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3', 'xfer53'])
('>>tryit', [1, 3], 'xfer35', [4, 0])
('>>>already stored', [4, 0], '=', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3'], 'not updating to', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3', 'xfer35'])
('---- toexplore', [])
**** all possible configurations
('store', '[3, 3]', ['start', 'fill3', 'xfer35', 'fill3'])
('store', '[2, 3]', ['start', 'fill5', 'xfer53'])
('store', '[5, 3]', ['start', 'fill5', 'fill3'])
('store', '[4, 3]', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53'])
('store', '[0, 2]', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53'])
('store', '[3, 0]', ['start', 'fill3', 'xfer35'])
('store', '[1, 3]', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3'])
('store', '[0, 3]', ['start', 'fill3'])
('store', '[5, 1]', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35'])
('store', '[5, 0]', ['start', 'fill5'])
('store', '[2, 0]', ['start', 'fill5', 'xfer53', 'empty3'])
('store', '[5, 2]', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5'])
('store', '[1, 0]', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35'])
('store', '[0, 1]', ['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5'])
('store', '[4, 0]', ['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3'])
('store', '[0, 0]', ['start'])
**** all ways to get goal
[4, 0]:['start', 'fill5', 'xfer53', 'empty3', 'xfer53', 'fill5', 'xfer53', 'empty3']
[1, 3]:['start', 'fill3', 'xfer35', 'fill3', 'xfer35', 'empty5', 'xfer35', 'fill3']
mpsb@mpsb-All-Series:~/Desktop/buckets$