Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class obj(object):
- def __init__(self,name,on,heavierThan):
- self.name = name
- self.setState(on,heavierThan)
- print("Object created with name '",self.name,"'.")
- def setState(self,on,heavierThan):
- #On = what object is on top of it
- self.on = on
- self.heavierThan = heavierThan
- def getItemsFromString(string):
- arr = []
- word = ""
- for i in range(len(string)):
- if string[i] == " ":
- arr.append(word)
- word = ""
- elif i == len(string)-1:
- word += string[i]
- finalWord = word.replace(" ","")
- #print("appending last word to list. The word is:", word)
- arr.append(finalWord)
- else:
- word += string[i]
- return arr
- def getOneParameter(command):
- started = False
- finished = False
- parameter = ""
- for letter in command:
- if letter == "(" and not started:
- started = True
- elif letter == ")" and started and not finished:
- finished = True
- return parameter
- elif started and not finished:
- parameter += letter
- def getTwoParameters(command):
- started1 = False
- finished1 = False
- started2 = False
- finsihed2 = False
- parameter = ""
- parameters = []
- for letter in command:
- if letter == "(":
- started1 = True
- elif letter == ",":
- finished1 = True
- started2 = True
- parameters.append(parameter)
- parameter = ""
- elif letter == ")":
- finished2 = True
- parameters.append(parameter)
- return parameters
- elif (started1 and not finished1) or (started2 and not finsihed2):
- parameter += letter
- def getObjectsFromNames(arr):
- objArr = []
- for i in range(len(arr)):
- objArr.append(obj(arr[i],None,None))
- return objArr
- def setInitialState(arr):
- #First iterate to find the commands and shove them in a tuple
- commands = []
- command = ""
- for i in range(len(arr)):
- wordFinished = False
- for letter in arr[i]:
- if letter == "(":
- commands.append(command)
- command = ""
- wordFinished = True
- elif not wordFinished:
- command += letter
- #print("The commands entered are:",commands)
- for i in range(len(commands)):
- if commands[i] == "ON":
- paramStrings = getTwoParameters(arr[i])
- params = []
- for i in range(len(objects)):
- if paramStrings[0] == objects[i].name:
- params.append(objects[i])
- for i in range(len(objects)):
- if paramStrings[1] == objects[i].name:
- params.append(objects[i])
- params[1].on = params[0].name
- elif commands[i] == "HEAVIER":
- params = []
- paramStrings = getTwoParameters(arr[i])
- for i in range(len(objects)):
- if paramStrings[0] == objects[i].name:
- params.append(objects[i])
- for i in range(len(objects)):
- if paramStrings[1] == objects[i].name:
- params.append(objects[i])
- params[0].heavierThan = params[1].name
- #print("The parameters are: ",params)
- elif commands[i] == "CLEAR":
- paramString = getOneParameter(arr[i])
- for i in range(len(objects)):
- if paramString == objects[i].name:
- param = objects[i]
- param.on = None
- #print("The lone parameter is:", param)
- def move(x,y,z):
- #check if preconditions are true
- if y.on == x.name and z.on == None and x.on == None and z.heavierThan == x.name:
- print("preconditions are true!")
- z.on = x.name
- y.on = None
- def printState():
- for i in range(len(objects)):
- print("Name:",objects[i].name,"| Object on top of it:",objects[i].on,"| Heavier than:",objects[i].heavierThan)
- #Actual Program begins here -------------------------------------------------------------------------------------------------------
- #objNames = getItemsFromString(input("Enter the objects in the Toy World as words separated by a space:"))
- #stateRaw = getItemsFromString(input("Enter the state the objects are in, using the format 'Command(x,y):"))
- objNames = getItemsFromString("A table2 table1")
- stateRaw = getItemsFromString("ON(A,table1) HEAVIER(table1,A) HEAVIER(table2,A) CLEAR(A) CLEAR(table2)")
- goalStateRaw = getItemsFromString("CLEAR(table1) CLEAR(A)")
- objects = getObjectsFromNames(objNames);
- setInitialState(stateRaw)
- print("The object names are:",objNames)
- print("The initial raw state is:", stateRaw)
- print("The objects are:")
- printState()
- print("attempting to move A from table1 to table2...")
- move(objects[0],objects[2],objects[1])
- printState()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement