Advertisement
dzocesrce

[VI] Pacman

Jan 23rd, 2025 (edited)
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.92 KB | None | 0 0
  1. #preslozen algoritam a i pregolema tabla i ne mi funkcionira za slozeni test cases, sigurno e do mene zaradi slozenosta, no msilam deka logicka greska nemam
  2. class Pacman(Problem):
  3.     def __init__(self, initial, house=None):
  4.         super().__init__(initial, house)
  5.  
  6.     def goal_test(self, state):
  7.         return len(state[3])==0
  8.  
  9.     def successor(self, state):
  10.         succ = {}
  11.         pac_x=state[0]
  12.         pac_y=state[1]
  13.         nasoka=state[2]
  14.         foods=state[3]
  15.         new_foods=[]
  16.  
  17.         if nasoka=='istok' and self.check_valid((pac_x+1,pac_y)):
  18.             if (pac_x+1,pac_y) in foods:
  19.                 for f in foods:
  20.                     if f==(pac_x+1,pac_y):
  21.                         continue
  22.                     else:
  23.                         new_foods.append(f)
  24.             else:
  25.                 for f in foods:
  26.                     new_foods.append(f)
  27.             succ["ProdolzhiPravo"]= (pac_x+1,pac_y,nasoka,tuple(new_foods))
  28.  
  29.         if nasoka=='zapad' and self.check_valid((pac_x-1,pac_y)):
  30.             if (pac_x-1,pac_y) in foods:
  31.                 for f in foods:
  32.                     if f==(pac_x-1,pac_y):
  33.                         continue
  34.                     else:
  35.                         new_foods.append(f)
  36.             else:
  37.                 for f in foods:
  38.                     new_foods.append(f)
  39.             succ["ProdolzhiPravo"]= (pac_x-1,pac_y,nasoka,tuple(new_foods))
  40.  
  41.  
  42.         if nasoka=='sever' and self.check_valid((pac_x,pac_y+1)):
  43.             if (pac_x,pac_y+1) in foods:
  44.                 for f in foods:
  45.                     if f==(pac_x,pac_y+1):
  46.                         continue
  47.                     else:
  48.                         new_foods.append(f)
  49.             else:
  50.                 for f in foods:
  51.                     new_foods.append(f)
  52.             succ["ProdolzhiPravo"]= (pac_x,pac_y+1,nasoka,tuple(new_foods))
  53.  
  54.         if nasoka=='jug' and self.check_valid((pac_x,pac_y-1)):
  55.             if (pac_x,pac_y-1) in foods:
  56.                 for f in foods:
  57.                     if f==(pac_x,pac_y-1):
  58.                         continue
  59.                     else:
  60.                         new_foods.append(f)
  61.             else:
  62.                 for f in foods:
  63.                     new_foods.append(f)
  64.             succ["ProdolzhiPravo"]= (pac_x,pac_y-1,nasoka,tuple(new_foods))
  65.  
  66.  
  67.  
  68.         if nasoka=='istok' and self.check_valid((pac_x-1,pac_y)):
  69.             if (pac_x-1,pac_y) in foods:
  70.                 for f in foods:
  71.                     if f==(pac_x-1,pac_y):
  72.                         continue
  73.                     else:
  74.                         new_foods.append(f)
  75.             else:
  76.                 for f in foods:
  77.                     new_foods.append(f)
  78.             succ["ProdolzhiNazad"] = (pac_x-1, pac_y, 'zapad', tuple(new_foods))
  79.  
  80.  
  81.         if nasoka=='zapad' and self.check_valid((pac_x+1,pac_y)):
  82.             if (pac_x+1,pac_y) in foods:
  83.                 for f in foods:
  84.                     if f==(pac_x+1,pac_y):
  85.                         continue
  86.                     else:
  87.                         new_foods.append(f)
  88.             else:
  89.                 for f in foods:
  90.                     new_foods.append(f)
  91.             succ["ProdolzhiNazad"] = (pac_x+1, pac_y, 'istok', tuple(new_foods))
  92.  
  93.         if nasoka=='sever' and self.check_valid((pac_x,pac_y-1)):
  94.             if (pac_x,pac_y-1) in foods:
  95.                 for f in foods:
  96.                     if f==(pac_x,pac_y-1):
  97.                         continue
  98.                     else:
  99.                         new_foods.append(f)
  100.             else:
  101.                 for f in foods:
  102.                     new_foods.append(f)
  103.             succ["ProdolzhiNazad"] = (pac_x, pac_y-1, 'jug', tuple(new_foods))
  104.  
  105.         if nasoka=='jug' and self.check_valid((pac_x,pac_y+1)):
  106.             if (pac_x,pac_y+1) in foods:
  107.                 for f in foods:
  108.                     if f==(pac_x,pac_y+1):
  109.                         continue
  110.                     else:
  111.                         new_foods.append(f)
  112.             else:
  113.                 for f in foods:
  114.                     new_foods.append(f)
  115.             succ["ProdolzhiNazad"] = (pac_x, pac_y+1, 'sever', tuple(new_foods))
  116.  
  117.         if nasoka == 'istok' and self.check_valid((pac_x, pac_y + 1)):
  118.             if (pac_x, pac_y + 1) in foods:
  119.                 for f in foods:
  120.                     if f==(pac_x, pac_y + 1):
  121.                         continue
  122.                     else:
  123.                         new_foods.append(f)
  124.             else:
  125.                 for f in foods:
  126.                     new_foods.append(f)
  127.             succ["SvrtiLevo"] = (pac_x, pac_y + 1, 'sever', tuple(new_foods))
  128.  
  129.         if nasoka == 'zapad' and self.check_valid((pac_x, pac_y - 1)):
  130.             if (pac_x, pac_y - 1) in foods:
  131.                 for f in foods:
  132.                     if f==(pac_x, pac_y - 1):
  133.                         continue
  134.                     else:
  135.                         new_foods.append(f)
  136.             else:
  137.                 for f in foods:
  138.                     new_foods.append(f)
  139.             succ["SvrtiLevo"] = (pac_x, pac_y - 1, 'jug', tuple(new_foods))
  140.  
  141.         if nasoka == 'sever' and self.check_valid((pac_x - 1, pac_y)):
  142.             if (pac_x - 1, pac_y) in foods:
  143.                 for f in foods:
  144.                     if f==(pac_x - 1, pac_y):
  145.                         continue
  146.                     else:
  147.                         new_foods.append(f)
  148.             else:
  149.                 for f in foods:
  150.                     new_foods.append(f)
  151.             succ["SvrtiLevo"] = (pac_x - 1, pac_y, 'zapad', tuple(new_foods))
  152.  
  153.         if nasoka == 'jug' and self.check_valid((pac_x + 1, pac_y)):
  154.             if (pac_x + 1, pac_y) in foods:
  155.                 for f in foods:
  156.                     if f==(pac_x + 1, pac_y):
  157.                         continue
  158.                     else:
  159.                         new_foods.append(f)
  160.             else:
  161.                 for f in foods:
  162.                     new_foods.append(f)
  163.             succ["SvrtiLevo"] = (pac_x + 1, pac_y, 'istok', tuple(new_foods))
  164.  
  165.         if nasoka == 'istok' and self.check_valid((pac_x, pac_y - 1)):
  166.             if (pac_x, pac_y - 1) in foods:
  167.                 for f in foods:
  168.                     if f==(pac_x, pac_y - 1):
  169.                         continue
  170.                     else:
  171.                         new_foods.append(f)
  172.             else:
  173.                 for f in foods:
  174.                     new_foods.append(f)
  175.             succ["SvrtiDesno"] = (pac_x, pac_y - 1, 'jug', tuple(new_foods))
  176.  
  177.         if nasoka == 'zapad' and self.check_valid((pac_x, pac_y + 1)):
  178.             if (pac_x, pac_y + 1) in foods:
  179.                 for f in foods:
  180.                     if f==(pac_x, pac_y + 1):
  181.                         continue
  182.                     else:
  183.                         new_foods.append(f)
  184.             else:
  185.                 for f in foods:
  186.                     new_foods.append(f)
  187.             succ["SvrtiDesno"] = (pac_x, pac_y + 1, 'sever', tuple(new_foods))
  188.  
  189.         if nasoka == 'sever' and self.check_valid((pac_x + 1, pac_y)):
  190.             if (pac_x + 1, pac_y) in foods:
  191.                 for f in foods:
  192.                     if f==(pac_x + 1, pac_y):
  193.                         continue
  194.                     else:
  195.                         new_foods.append(f)
  196.             else:
  197.                 for f in foods:
  198.                     new_foods.append(f)
  199.             succ["SvrtiDesno"] = (pac_x + 1, pac_y, 'istok', tuple(new_foods))
  200.  
  201.         if nasoka == 'jug' and self.check_valid((pac_x - 1, pac_y)):
  202.             if (pac_x - 1, pac_y) in foods:
  203.                 for f in foods:
  204.                     if f==(pac_x - 1, pac_y):
  205.                         continue
  206.                     else:
  207.                         new_foods.append(f)
  208.             else:
  209.                 for f in foods:
  210.                     new_foods.append(f)
  211.             succ["SvrtiDesno"] = (pac_x - 1, pac_y, 'zapad', tuple(new_foods))
  212.  
  213.         return succ
  214.  
  215.  
  216.  
  217.     @staticmethod
  218.     def check_valid(state):
  219.         if state[0]<0 or state[0]>4 or state[1]<0 or state[1]>4:
  220.                 return False
  221.         #if state in ((0,9),(1,9),(2,9),(3,9),(6,9),(0,8),(8,8),(9,8),(4,7),(8,7),(9,7),(0,6),(3,6),(4,6),(5,6),(4,5),(1,4),(8,4),(9,4),(1,3),(1,2),(6,2),(4,1),(5,1),(6,1),(8,1),(6,0)):
  222.         #    return False
  223.         if state in ((1,1),(2,2),(3,4),(0,4)):
  224.             return False
  225.         return True
  226.     def actions(self, state):
  227.         return self.successor(state).keys()
  228.  
  229.     def result(self, state, action):
  230.         return self.successor(state)[action]
  231.  
  232. if __name__ == "__main__":
  233.  
  234.     pac_x= int(input())
  235.     pac_y= int(input())
  236.     nasoka= input()
  237.     n= int(input())
  238.     foods= []
  239.     for _ in range(n):
  240.         x, y = map(int, input().split(','))
  241.         foods.append((x, y))
  242.  
  243.  
  244.     pacman= Pacman((pac_x,pac_y,nasoka,tuple(foods)))
  245.     answer=breadth_first_graph_search(pacman)
  246.  
  247.     if answer is None:
  248.         print("None")
  249.     else:
  250.         print(answer.solution())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement