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$