Условие
Даны начальное состояние устройства и последовательность команд. Определите состояние после выполнения всех команд в заданном порядке.
Объявите 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.
Примеры
0 2 1 2
MEASURING
1 4 2 4 2 5
READY
0 3 2 4 5
OFF