Эта история изначально была опубликована на моем [email protected] здесь.

Разработка приложения для парковки - один из популярных вопросов во многих компаниях, таких как Thoughtworks, Gojek, Amazon и т. Д. В этом вопросе есть все необходимое для проверки дизайнерских навыков кандидата для создания масштабируемой системы.

Постановка проблемы.
Я владею многоэтажной парковкой, на которой в любой момент времени может поместиться до n автомобилей. Каждому слоту присваивается номер, начиная с 1, увеличивающийся с увеличением расстояния от точки входа с шагом в единицу. Я хочу создать автоматизированную систему продажи билетов, которая позволит моим клиентам пользоваться моей парковкой без вмешательства человека.
Когда машина въезжает на мою парковку, я хочу, чтобы билет был выдан водителю. Процесс выдачи билета включает в себя документирование регистрационного номера (номерного знака) и цвета автомобиля, а также выделение доступного места для парковки автомобилю, прежде чем фактически передать билет водителю (мы предполагаем, что наши клиенты достаточно любезны, чтобы всегда парковаться. в отведенных им слотах).

Клиенту должно быть выделено ближайшее к въезду парковочное место. На выходе клиент возвращает билет, который затем отмечает слот, который он использовал, как доступный.
В соответствии с государственным постановлением система должна предоставить мне возможность узнать:

● Регистрационные номера всех автомобилей определенного цвета.
● Номер слота, в котором припаркован автомобиль с данным регистрационным номером.
● Номера слотов всех слотов, где припаркован автомобиль определенного цвета.

Мы взаимодействуем с системой с помощью простого набора команд, которые производят определенный вывод. Система должна позволять ввод двумя способами. Чтобы уточнить, одна и та же база кода должна поддерживать оба режима ввода:
1) Она должна предоставлять нам оболочку на основе интерактивной командной строки, в которой можно вводить команды.
2) Она должна принимать имя файла в качестве параметра в командной строке и прочтите команды из этого файла.

Пример: файл
Чтобы установить все зависимости, скомпилировать и запустить тесты:
$ bin / setup
Чтобы запустить код, чтобы он принимал ввод из файла:
$ bin / Parking_lot file_inputs.txt
Вход (содержимое файла):
create_parking_lot 6
park KA-01-HH-1234 Белый
park KA-01-HH- 9999 Белый
парк KA-01-BB-0001 Черный
парк KA-01-HH-7777 Красный
парк KA-01-HH-2701 Синий
парк KA-01- HH-3141 Черный
оставить 4
статус
парк KA-01-P-333 Белый
парк DL-12-AA-9999 Белый
Регистрационный_номера_для автомобилей_с_цветом Белый
slot_numbers_for_cars_with_colour Белый
slot_number_for_registration_number KA-01-HH-3141
slot_number_for_registration_number MH-04-AY-1111Выход (для STDOUT):
Создана парковка с 6-ю слотами
: 1
Номер выделенного слота: 2
Номер выделенного слота: 3
Номер выделенного слота: 4
Номер выделенного слота: 5
Номер выделенного слота: 6
Слот номер 4 бесплатно
Номер слота Регистрационный номер
Цвет
1
KA-01-HH-1234
Белый
2
KA- 01-HH-9999
Белый
3
KA-01-BB-0001
Черный
5
KA-01-HH-2701
Синий
6
KA-01-HH-3141
Черный
Номер выделенного слота: 4
Извините, парковка заполнена
KA-01- HH-1234, KA-01-HH-9999, KA-01-P-333
1, 2, 4
6
Не найдено

Пример: интерактивный
Чтобы установить все зависимости, скомпилировать и запустить тесты:
$ bin / setup
Чтобы запустить программу и запустить оболочку:
$ bin / Parking_lot
Предполагая, что парковка с 6 слотами, следующие команды должны выполняться в последовательности
, вводя их в командной строке, и должны выдавать результат, как описано
под командой. Обратите внимание, что exit завершает процесс и возвращает управление
оболочке.
$ create_parking_lot 6
Создана парковка с 6 слотами
$ park KA-01-HH-1234 Белый
Номер выделенного слота: 1
$ park KA-01-HH-9999 Белый
Номер выделенного слота: 2
$ park KA-01-BB-0001 Черный Номер выделенного слота: 3
$ park KA-01-HH-7777 Красный
Номер выделенного слота: 4
$ park KA-01-HH-2701 Синий
Номер выделенного слота: 5
$ park KA-01-HH-3141 Черный
Номер выделенного слота: 6
$ leave 4
Слот номер 4 свободен
Статус $
Номер слота < br /> 1
2
3
5
6
Регистрационный номер
KA-01-HH-1234
KA-01-HH -9999
KA-01-BB-0001
KA-01-HH-2701
KA-01-HH-3141
Цвет
Белый
Белый
Черный
Синий
Черный
$ park KA-01-P-333 Белый
Номер выделенного слота: 4
$ park DL-12-AA- 9999 Белый
Извините, парковка заполнена
$ registration_numbers_for_cars_ with_colour Белый
KA-01-HH-1234, KA-01-HH-9999, KA-01-P-333
$ slot_numbers_for_cars_with_colour Белый
1, 2, 4
$ slot_number_for_registration_number KA-01-HH-3141
6
$ slot_number_for_registration_number MH-04-AY-1111
Не найден
$ exit

Ссылка на мое решение на github ниже:



Вопросов ? Предложения ? Комментарии ?

Что дальше? Подписывайтесь на меня на Medium, чтобы первым читать мои истории.