Example #1
0
 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()
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 def test_throw_fried_check_microchip(self):
     with self.assertRaises(FriedChipError):
         floors = Floors([['AM', 'BG']])
         floors.check_fried_microchips(0)
Example #8
0
 def test_protected():
     floors = Floors([['AM', 'AG', 'BG']])
     floors.check_fried_microchips(0)
     floors.check_fried_microchips(0)
     floors.check_fried_microchips(0)
Example #9
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())