2.4 Перечисления

2.4.2 Управление устройством

Условие

Даны начальное состояние устройства и последовательность команд. Определите состояние после выполнения всех команд в заданном порядке.

Объявите enum DeviceState с константами DEVICE_OFF = 0, DEVICE_READY = 1, DEVICE_MEASURING = 2, DEVICE_ERROR = 3. Объявите enum Command с константами CMD_POWER_ON = 1, CMD_START = 2, CMD_STOP = 3, CMD_FAIL = 4, CMD_RESET = 5, CMD_POWER_OFF = 6.

Правила выполнения команд:

  • CMD_POWER_ON: выключенное устройство переходит в состояние готовности; остальные состояния не изменяются.
  • CMD_START: готовое устройство начинает измерение; остальные состояния не изменяются.
  • CMD_STOP: измеряющее устройство переходит в состояние готовности; остальные состояния не изменяются.
  • CMD_FAIL: любое включённое устройство переходит в состояние ошибки; выключенное остаётся выключенным.
  • CMD_RESET: устройство в состоянии ошибки переходит в состояние готовности; остальные состояния не изменяются.
  • CMD_POWER_OFF: устройство из любого состояния переходит в выключенное состояние.

Реализуйте функцию enum DeviceState apply_command(enum DeviceState state, enum Command command), которая принимает состояние и команду по значению и возвращает новое состояние. Функция не должна выполнять ввод или вывод. В main вызовите её для каждой команды, каждый раз сохраняя возвращённое состояние.

Входные коды гарантированно допустимы. В C++ для преобразования прочитанного целого к соответствующему перечислению используйте явное приведение типа, например static_cast<enum Command>(code).

Ограничения

Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Стандарты: C11 / C++17.

Входные данные

В первой строке вводится целое число state — начальное состояние. Во второй строке вводится целое число N — количество команд. В третьей строке вводятся N целых кодов команд через пробел. Ограничения: 0 ≤ state ≤ 3, 1 ≤ N ≤ 1000, каждый код команды находится в диапазоне от 1 до 6.

Выходные данные

Одна строка — название конечного состояния: OFF, READY, MEASURING или ERROR.

Примеры

Вход 1
0
2
1 2
Ожидаемый выход
MEASURING
Вход 2
1
4
2 4 2 5
Ожидаемый выход
READY
Вход 3
0
3
2 4 5
Ожидаемый выход
OFF

Пробный запуск

Код берётся из редактора. Запуск не создаёт посылку и не влияет на баллы.

Выберите пример или введите свои данные и нажмите «Запустить».

Текущая попытка

Отправьте решение. Этапы и результат появятся здесь автоматически.

Все попытки

Войдите, чтобы видеть свои попытки.

Редактор

Один файл до 64 КиБ · Tab / Shift+Tab — отступ · Esc — выход из редактора · черновик сохраняется для этого аккаунта, задачи и языка.