def shortestPath(self, gameState, isEnd): """ find the shortest path from current position to destination defined by the function isEnd """ pos = tuple(gameState.getPacmanPosition()) # if there is not food left visited = [] q = Queue() q.put((pos,0)) visited.append(pos) while not q.empty(): (pos,dis) =q.get() visited.append(pos) for (dx,dy) in [(0,1),(0,-1),(1,0),(-1,0)]: x = pos[0] + dx y = pos[1] + dy if (isEnd(x,y)): return dis + 1 if (not gameState.hasWall(x,y)) and (not (x,y) in visited): q.put(((x,y),dis+1)) raise Exception("should not reach here")
def get_all_social_paths(self, user_id: int): """ Takes a user's user_id as an argument Returns a dictionary containing every user in that user's extended network with the shortest friendship path between them. The key is the friend's ID and the value is the path. """ queue = Queue() queue.push([user_id]) visited = {user_id} connections = {} while not queue.empty(): path = queue.pop() user = path[-1] connections[user] = path for next_user in self.get_friends(user): if next_user not in visited: visited.add(next_user) queue.push([*path, next_user]) return connections
def solution(s): q = Queue(len(s)) total = 0 for token in s: if q.empty(): q.put(token) total += 1 else: if token > q.peek(): q.put(token) total += 1 else: while not q.empty() and token < q.peek(): q.get() if q.empty() or token != q.peek(): q.put(token) total += 1 return total
def solution(s): q = Queue(len(s)) for token in s: if token in '{[(': q.put(token) else: if q.empty(): return 0 if token == ')': if q.get() != '(': return 0 elif token == '}': if q.get() != '{': return 0 else: if q.get() != '[': return 0 if q.empty(): return 1 else: return 0
def solution(S, D): assert (len(S) == len(D)) q = Queue(len(S)) total = 0 for size, direction in zip(S, D): # print size, direction if direction == 1: q.put(size) else: if q.empty(): total += 1 else: while not q.empty(): upstream_size = q.get() if upstream_size > size: q.put(upstream_size) break if q.empty(): total += 1 # return total + q.size() return total + q.size()
def longest_path(self, starting_node: int): queue = Queue() queue.push([starting_node]) visited = {starting_node} longest_path = [] while not queue.empty(): path = queue.pop() node = path[-1] longest_path = longest_path if len(longest_path) > len( path) else path for next_node in self.get_neighbors(node): if next_node not in visited: visited.add(next_node) queue.push([*path, next_node]) return longest_path
class Player(pygame.sprite.Sprite): # feet_walk = [pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_0.png'), pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_1.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_2.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_3.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_4.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_5.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_6.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_7.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_8.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_9.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_10.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_11.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_12.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_13.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_14.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_15.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_16.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_17.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_18.png'),pygame.image.load('PlayerSprites/Images/feet/walk/survivor-walk_19.png')] # rifle_walk = [pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_0.png'), pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_1.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_2.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_3.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_4.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_5.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_6.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_7.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_8.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_9.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_10.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_11.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_12.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_13.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_14.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_15.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_16.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_17.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_18.png'),pygame.image.load('PlayerSprites/Images/rifle/move/survivor-move_rifle_19.png'),] # for image in feet_walk: # pygame.transform.scale(image, (150, 99)) # for image in rifle_walk: # pygame.transform.scale(image, (150, 99)) # feet_offset = rifle_walk[0].get_height() / 3 def __init__(self, location): # init pygame.sprite.Sprite.__init__(self) self.health = 100 self.image = pygame.image.load( 'PlayerSprites/Images/handgun/move/survivor-move_handgun_0.png') self.image = pygame.transform.scale(self.image, (50, 33)) self.rect = self.image.get_rect() self.loc = location self.last_loc = location self.rect.center = self.loc.as_tuple() self._bot = False self._grid = None self.moving = False self.moves = Queue() self.frame_meta = { 'frame': 0, 'start': None, 'end': None, 'frames': range(settings.move_frames) } self.dirty = 0 self.orig_image = self.image self.offset = Vector2(9.346, -2.72) # We shift the sprite 50 px to the right. self.direction = 0 # degrees: 0º is facing right self._last_dir = 0 self.view_distance = 700 self.fov = 65 # degrees self._resolved = True self.wcb = None self.ecb = None self.sensor_range = 150 self.sensor_circle = pygame.Rect(0, 0, self.sensor_range, self.sensor_range) self.sensor_reset_time = 0 self.shooting = False self.bullet_time = 5 self.gun = Pistol(Loc(0, 0)) self.prev_gun = None self.shoot_delay = self.gun.fire_delay def is_bot(self): return self._bot def set_grid(self, grid): self._grid = grid def cb(self, result): self._resolved = True self.wcb(result) def shoot(self, sprites, walls): if self.shoot_delay < 0 < self.gun.ammo: ray = Ray() collidables = [sprite.rect for sprite in sprites] ray.get_collider(self.loc, self.direction, collidables, walls) self.gun.ammo -= 1 self.sensor_range = 400 self.sensor_reset_time = 10 self.shoot_delay = self.gun.fire_delay self.bullet_time = 5 def rotate(self): self.image = pygame.transform.rotozoom(self.orig_image, -self.direction, 1) offset_rotated = self.offset.rotate(self.direction) self.rect = self.image.get_rect(center=self.loc.as_tuple() + offset_rotated) def scan(self, sprites, walls): if self._resolved: self._resolved = False collidables = [sprite.rect for sprite in sprites] # sprite_map = {s.rect: s for s in sprites} args = (self.loc, self.fov, self.direction, collidables, walls) Workers.delegate(in_sight, args, callback=self.cb, error_callback=self.ecb) def move(self, action): if not self.moving: direction = directions[actions.index(action)] self.set_frames(direction) loc = self.loc.to_grid() end_loc = loc.add(direction) if not self._grid[end_loc].is_wall(): self.init_move(end_loc.to_pixel()) elif self.is_bot(): self._recompute = True else: self.normalize_diagonal(loc, end_loc) elif self.frame_meta['frame'] == len(self.frame_meta['frames']): self.moves.push(action) def set_frames(self, direction): if direction.x and direction.y: self.frame_meta['frames'] = range(int(settings.move_frames * 1.6)) else: self.frame_meta['frames'] = range(settings.move_frames) def init_move(self, end): self.moving = True self.dirty = 1 self.frame_meta['start'] = self.loc self.frame_meta['end'] = end def normalize_diagonal(self, loc, end): loc1 = GridLoc(loc.x, end.y) loc2 = GridLoc(end.x, loc.y) node1 = self._grid[loc1] node2 = self._grid[loc2] if node1.is_wall() and (not node2.is_wall()): self.init_move(loc2.to_pixel()) elif (not node1.is_wall()) and node2.is_wall(): self.init_move(loc1.to_pixel()) def update(self): self.handle_move_frame() if self.prev_gun is not self.gun: if self.gun is type(Pistol): self.image = pygame.image.load( 'PlayerSprites/Images/handgun/move/survivor-move_handgun_0.png' ) elif self.gun is type(AssualtRifle1) or type(AssualtRifle2): self.image = pygame.image.load( 'PlayerSprites/Images/rifle/move/survivor-move_rifle_0.png' ) elif self.gun is type(SubMachine2) or type(SubMachine1): self.image = pygame.image.load( 'PlayerSprites/Images/shotgun/move/survivor-move_shotgun_0.png' ) self.image = pygame.transform.scale(self.image, (50, 33)) self.rect = self.image.get_rect() self.rect.center = self.loc.as_tuple() self.prev_gun = self.gun self.sensor_reset_time -= 1 self.bullet_time -= 1 self.shoot_delay -= 1 if self.sensor_reset_time < 0: self.sensor_range = 150 self.last_loc = PixelLoc(self.rect.x, self.rect.y) self.rect.x, self.rect.y = self.loc.as_tuple() self.sensor_circle.center = self.loc.as_tuple() x, y = pygame.mouse.get_pos() if self.is_bot(): if self.goal: self.direction = get_direction(self.loc, self.goal.to_pixel()) else: self.direction = get_direction(self.loc, PixelLoc(x, y)) self.dirty = 1 self.rotate() def handle_move_frame(self): frame = self.frame_meta['frame'] frames = self.frame_meta['frames'] start = self.frame_meta['start'] end = self.frame_meta['end'] if frame == len(frames): self.end_move() if self.is_bot() and self.moving: self.draw_path = self.draw_path[1:] if len( self.draw_path) > 1 else [] if not self.moves.empty(): self.move(self.moves.pop()) elif self.moving and start and end: self.loc = lerp(frame, frames, start, end) self.frame_meta['frame'] += 1 else: if not self.moves.empty(): self.move(self.moves.pop()) def end_move(self, flush_queue=False, finish_interpolation=False): if flush_queue: self.moves.clear() if not finish_interpolation: self.moving = False self.dirty = 0 self.frame_meta['obj'] = self.frame_meta[ 'start'] = self.frame_meta['end'] = None self.frame_meta['frame'] = 0 def draw(self, screen): if self.bullet_time > 0: pygame.draw.line( screen, Colors.YELLOW, (self.loc.x, self.loc.y), (end_points( (self.loc.x, self.loc.y), self.direction, 1000)))