class SymbolMap(object): def __init__(self, min_v): self._list = SortedCollection((), lambda x : x[0]) self._min_vaddr = min_v def add_symbol(self, start, length, name): tuple = (start, length, name) self._list.insert(tuple) def find(self, addr): try: tuple = self._list.find_le(addr) if addr < tuple[0] + tuple[1]: return tuple[2] return None except ValueError: return None def copy(self): ret = SymbolMap() ret._list = self._list.copy() return ret def __str__(self): return "SymbolMap: " + self._list.__str__() def __repr__(self): return self.__str__()
class MmapState(object): def __init__(self): self._list = SortedCollection((), lambda x : x[0]) def add_map(self, start, length, pgoff, name): tuple = (start, length, pgoff, name) self._list.insert(tuple) def find(self, addr): try: tuple = self._list.find_le(addr) if addr < tuple[0] + tuple[1]: return tuple return None except ValueError: return None def copy(self): ret = MmapState() ret._list = self._list.copy() return ret def __str__(self): return "MmapState: " + self._list.__str__() def __repr__(self): return self.__str__()
class ElvesReady: def __init__(self): self.training_elf_list = SortedCollection(key=attrgetter('rating')) self.high_performance_elf_list = [] def get_elf_with_best_fit_rating(self, rating): return self.training_elf_list.find_ge(rating) def add_elf(self, elf): if elf.rating > 3.95: self.high_performance_elf_list.append(elf) else: self.training_elf_list.insert(elf) def add_elves(self, elves): for elf in elves: self.add_elf(elf) def remove_from_training_list(self, elf): self.training_elf_list.remove(elf) def remove_from_high_performance_list(self, elf): self.high_performance_elf_list.remove(elf) #todo: remove elves that are chosen.
class SymbolMap(object): def __init__(self, min_v): self._list = SortedCollection((), lambda x: x[0]) self._min_vaddr = min_v def add_symbol(self, start, length, name): tuple = (start, length, name) self._list.insert(tuple) def find(self, addr): try: tuple = self._list.find_le(addr) if addr < tuple[0] + tuple[1]: return tuple[2] return None except ValueError: return None def copy(self): ret = SymbolMap() ret._list = self._list.copy() return ret def __str__(self): return "SymbolMap: " + self._list.__str__() def __repr__(self): return self.__str__()
class MmapState(object): def __init__(self): self._list = SortedCollection((), lambda x: x[0]) def add_map(self, start, length, pgoff, name): map_tuple = (start, length, pgoff, name) self._list.insert(map_tuple) def find(self, addr): try: map_tuple = self._list.find_le(addr) if addr < map_tuple[0] + map_tuple[1]: return map_tuple return None except ValueError: return None def copy(self): ret = MmapState() ret._list = self._list.copy() return ret def __str__(self): return 'MmapState: ' + self._list.__str__() def __repr__(self): return self.__str__()
def compute_path(self, orig, goal): orig = map(int, orig) goal = tuple(goal) queue = SortedCollection(key=itemgetter(0)) queue.insert((0, orig, 0)) pred = {} pred[tuple(orig)] = None while len(queue) > 0: score, (px, py), steps = queue[0] queue.remove_first() if (px, py) == goal: # follow trail back greedily pos = (px, py) plan = [pos] while pred[pos]: plan.append(pred[pos]) pos = pred[pos] return plan[::-1][1:] for dx, dy in CognitiveMonkey.Directions: nx, ny = px + dx, py + dy if (nx, ny) in pred: continue if nx < 0 or ny < 0 or nx >= self.world.height or ny >= self.world.width: continue if self.explore_map[nx][ny] == CognitiveMonkey.Obstacle: continue pred[(nx, ny)] = (px, py) nscore = steps + 1 + Collisions.distance((nx, ny), goal) queue.insert((nscore, (nx, ny), steps + 1)) return []