Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from utils import *
- from uninformed_search import *
- class HanoiTowers(Problem):
- def __init__(self,initial,goal,n):
- Problem.__init__(self,initial,goal)
- self.initial=initial
- self.goal=goal
- self.n=n
- def goal_test(self, state):
- return state == self.goal
- def successor(self, state):
- rez = dict()
- ppp = 0
- for i in range(0,len(state)):
- #print("NOVA so state: "+str(state))
- pillar = state[i]
- if len(pillar)>0:
- for j in range(0,len(state)):
- destPil=state[j]
- if i==j:
- ppp = 0
- else:
- plocka = pillar[len(pillar) - 1]
- novPoceten = pillar[:len(pillar)-1]
- novKraenTMP = list(destPil)
- novKraenTMP.append(plocka)
- novKraen = tuple(novKraenTMP)
- novStateTMP = list()
- for k in range(0,len(state)):
- if k==i:
- novStateTMP.append(novPoceten)
- elif k==j:
- novStateTMP.append(novKraen)
- else:
- novStateTMP.append(state[k])
- novState = tuple(novStateTMP)
- # print(novState)
- if self.validityCheck(novState):
- #print(novState)
- akcija = "MOVE TOP BLOCK FROM PILLAR "+str(i+1)+" TO PILLAR "+str(j+1)
- #print(akcija)
- rez[akcija]=novState
- else:
- #print("ne moze ova")
- ppp=0
- return rez
- def validityCheck(self,state):
- for pillar in state: # bi trebalo da vrti 3 pati
- for i in range(0,len(pillar)-1):
- if pillar[i]<=pillar[i+1]:
- return False
- return True
- if __name__=="__main__":
- # inState = ((3,2,1),(),())
- # glState = ((),(),(3,2,1))
- s = input()
- initial_towers = tuple([tuple(map(int, x.split(','))) if x != '' else () for x in s.split(';')])
- s = input()
- goal_towers = tuple([tuple(map(int, x.split(','))) if x != '' else () for x in s.split(';')])
- #problem = HanoiTowers(inState,glState,3)
- #problem.successor(inState)
- n=0
- for tow in initial_towers:
- if len(tow)>0:
- n=len(tow)
- problem = HanoiTowers(initial_towers,goal_towers,n)
- ans = breadth_first_graph_search(problem)
- #print(ans.solve())
- print("Number of steps required: "+len(ans))
- print("Solution: ")
- print(ans.solution())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement