Back

Week 1- Pseudocode to Javascript

[Monday, 03 July 2023]

The Elevator problem

Prompt

We are running an elevator company and are currently developing a new product. We want our product to work for every building in the country, so we need it to be able to handle a variable number of floors.

Come up with a list of requirements it has to fulfil. Then implement a Pseudocode algorithm that meets the requirements.

Requirements

  • Must be able to handle a variable number of floors
  • Should change direction as little as possible
  • Should be able to handle multiple requests at once and from different floors

Pseudocode: [Authored by Axel]

// Declare bubble sort function with input type array and return type array
FUNCTION bubble_sort(Numbers: ARRAY)
  DECLARE NumUnsorted, Index, TempNumber: INTEGER
  DECLARE IsSorted: BOOLEAN
  NumUnsorted <- LENGTH(Numbers) - 1
  REPEAT
    IsSorted <- TRUE
    FOR Index <- 1 TO NumUnsorted
      IF Numbers[Index] > Numbers[Index + 1] THEN
        TempNumber <- Numbers[Index]
        Numbers[Index] <- Numbers[Index + 1]
        Numbers[Index + 1] <- TempNumber
        IsSorted <- FALSE
      ENDIF
    NEXT Index
    NumUnsorted <- NumUnsorted - 1
  UNTIL IsSorted = TRUE
  RETURN Numbers
ENDFUNCTION

// Declare our variables
DECLARE NumOfFloors, NewFloor, i: INTEGER
DECLARE IsInArray: BOOLEAN
DECLARE FloorRequestArray: ARRAY[0:NumOfFloors]
NumOfFloors <- 4

// Create a function that takes in floor requests
FUNCTION make_floor_request(NewFloor: INTEGER, FloorRequestArray: ARRAY)
  NewFloor <- INPUT("Enter a floor")
  IsInArray <- FALSE
  FOR i <- 0 TO LENGTH(FloorRequestArray)
    IF FloorRequestArray[i] = NewFloor THEN
      IsInArray <- TRUE
    ENDIF
  NEXT i
  IF IsInArray = FALSE THEN
    INSERT NewFloor INTO FloorRequestArray
    FloorRequestArray <- bubble_sort(FloorRequestArray)
  ENDIF
  RETURN FloorRequestArray
ENDFUNCTION

// Create a function that processes the floor requests
DECLARE ElevatorDirection: STRING
DECLARE CurrentFloor, NextFloor: INTEGER
ElevatorDirection <- "idle"
CurrentFloor <- 1

FUNCTION floor_request_process(FloorRequestArray: ARRAY)
  FUNCTION return_next_higher_floor()
    DECLARE i: INTEGER
    i <- 0
    WHILE CurrentFloor < FloorRequestArray[i] DO
      NextFloor <- FloorRequestArray[i]
      i <- i + 1
    ENDWHILE
  ENDFUNCTION

  FUNCTION return_next_lower_floor()
    DECLARE i: INTEGER
    i <- 0
    WHILE CurrentFloor > FloorRequestArray[i] DO
      NextFloor <- FloorRequestArray[i-1]
      i <- i + 1
    ENDWHILE
  ENDFUNCTION

  IF ElevatorDirection = 'DOWN' THEN
    return_next_lower_floor()
  ELSE
    return_next_higher_floor()
  ENDIF
ENDFUNCTION

DECLARE DoorOpen: BOOLEAN
DoorOpen <- FALSE

FUNCTION elevator_carrying_out_request(FloorRequestArray: ARRAY)
  SWITCH NextFloor
    CASE NextFloor > CurrentFloor THEN
      ElevatorDirection <- 'UP'
      CurrentFloor <- CurrentFloor + 1
      elevator_carrying_out_request(FloorRequestArray)
    CASE NextFloor = CurrentFloor THEN
      DoorOpen <- TRUE
      DoorOpen <- FALSE
      floor_request_process(FloorRequestArray)
      elevator_carrying_out_request(FloorRequestArray)
    CASE NextFloor < CurrentFloor THEN
      ElevatorDirection <- 'DOWN'
      CurrentFloor <- CurrentFloor - 1
      elevator_carrying_out_request(FloorRequestArray)
  ENDSWITCH
ENDFUNCTION
Floor 6
Floor 5
Floor 4
Floor 3
Floor 2
Floor 1
Elevator