/the-lift

The Lift Simulator.

Primary LanguageKotlin

Симулятор Лифта

Компиляция и запуск

$ make

Комманды

-eN -- внешний вызов лифта на этаж N

-iN -- внутреннее нажатие с целью поехать на этаж N

Описание алгоритма

Симулятор реализован ввиде стейт машины. Переходы между состояниями осуществляются на основе списка(агенды) текущих команд лифту. При нажатии внешней(на этаже) или внутренней (в самом лифте) кнопки, в агенду добавляется команда. По завершении каждого состояния, на его основе и текущей агенды выбирается следующее состояние и т.д. . По завершении состояния OpenCloseDoors из агенды удаляется команды соответствующие этажу.

Стейт машина

Rest 
    --> OpenCloseDoors
    --> MoveOneFloorDown
    --> MoveOneFloorUp
     
OpenCloseDoors 
    --> Rest
    --> MoveOneFloorDown
    --> MoveOneFloorUp
    
MoveOneFloorDown
    --> MoveOneFloorDown
    --> MoveOneFloorUp
    --> OpenCloseDoors

Мотивация

Такой подход был выбран с прицелом на возможность гибкого изменения поведения лифта. Возможны как минимум два типа лифтов отличающиеся приоритетами в поведении: лифт в жилом доме, лифт в бизнесс центре корпорации. Первую категорию лифтов отличает то что люди восновном пытаются либо выбраться наружу со своего этажа либо наоборот, но гораздо реже они используют лифт для перемещения с этажа на этаж. А потому лифт оптимизирован как правило для того чтобы подбирать попутчиков лишь на пути вниз. В бизнес центре, люди часто перемещаются с этажа на этаж ввиду например распределённости сотрудников по этажам. Правда, нужно отметить что там и кнопок на этаже как правило не одна как в жилом доме, а по две и они указывают куда человек намеревается ехать -- вниз или вверх. Так или иначе, мне показалось интерессным применить данный подход для програмирования лифта. Были и другие идеи конечно.