def test_get_floor_pairs(self): floors = Floors([['AG'], ['BM'], ['AM'], ['BG']]) expected = [[2, 0], [1, 3]] pairs = floors.generate_pairs() self.assertEqual(len(expected), len(pairs)) for pair in pairs: self.assertTrue(pair in expected)
def equivalent_states(s_1, s_2) -> bool: if s_1.get_elevator_floor() != s_2.get_elevator_floor(): return False s1_pairs = Floors(s_1.get_floors()).generate_pairs() s2_pairs = Floors(s_2.get_floors()).generate_pairs() if len(s1_pairs) != len(s2_pairs): return False unmatched = s1_pairs for s2_pair in s2_pairs: try: unmatched.remove(s2_pair) except ValueError: return False return True
class RadiationContainmentSimulator: def __init__(self, initial_state:SimulatorState): self.floors = Floors(initial_state.floors) self.elevator = Elevator(initial_state.get_elevator_floor()) def get_simulator_state(self) -> SimulatorState: state = SimulatorState(self.elevator.get_floor()) state.set_floors(self.floors) return state def current_floor_items(self) -> list[str]: elevator_floor = self.elevator.get_floor() return self.floors.get_floors()[elevator_floor] def elevator_up(self, cargo:list[str]): one_floor_up = self.elevator.get_floor() + 1 if one_floor_up > 3: raise ElevatorMoveError('Cannot go above fourth floor') self.elevator.elevator_move(cargo, one_floor_up, self.floors) def elevator_down(self, cargo:list[str]): one_floor_down = self.elevator.get_floor() - 1 if one_floor_down < 0: raise ElevatorMoveError('Cannot go below zeroth floor') self.elevator.elevator_move(cargo, one_floor_down, self.floors)
def set_floors(self, value: Floors): self.floors = value.get_floors()
def throw_pickup_error(self, item: str, floors: Floors): error = ('Item not is not on the same floor as the elevator:' + 'Elevator Floor: ' + str(self.floor) + ' Item Name: ' + item + ' Floor: ' + str(floors.get_item_floor(item))) raise ElevatorPickupError(error)
def move_cargo(self, cargo: list[str], next_floor: int, floors: Floors): for item in cargo: if self.floor != floors.get_item_floor(item): self.throw_pickup_error(item, floors) floors.move_item_to_floor(item, next_floor) floors.check_fried_microchips(next_floor)
def test_throw_fried_check_microchip(self): with self.assertRaises(FriedChipError): floors = Floors([['AM', 'BG']]) floors.check_fried_microchips(0)
def test_protected(): floors = Floors([['AM', 'AG', 'BG']]) floors.check_fried_microchips(0) floors.check_fried_microchips(0) floors.check_fried_microchips(0)
def test_not_fried_check_microchip(): floors = Floors([['BM', 'BG']]) floors.check_fried_microchips(0) floors.check_fried_microchips(0)
def __init__(self, initial_state:SimulatorState): self.floors = Floors(initial_state.floors) self.elevator = Elevator(initial_state.get_elevator_floor())