#include <stdio.h>
typedef void (*Handler)(void);
// microcontroller commands
void BlueOn
(void) { printf ("Включаем синий. "); } void BlueOff
(void) { printf ("Выключаем синий. "); } void RedOn
(void) { printf ("Включаем красный. "); } void RedOff
(void) { printf ("Выключаем красный. "); }
// handlers for the signals
void BlueOnRedOn(void) { BlueOn(); RedOn(); }
void BlueOnRedNone(void) { BlueOn(); }
void BlueOnRedOff(void) { BlueOn(); RedOff(); }
void BlueNoneRedOn(void) { RedOn(); }
void BlueNoneRedOff(void) { RedOff(); }
void BlueOffRedOn(void) { BlueOff(); RedOn(); }
void BlueOffRedNone(void) { BlueOff(); }
void BlueOffRedOff(void) { BlueOff(); RedOff(); }
// jump table
Handler bothOff[4] = { 0, BlueOnRedNone, BlueNoneRedOn, BlueOnRedOn };
Handler blueOn[4] = { BlueOffRedNone, 0, BlueOffRedOn, BlueNoneRedOn };
Handler redOn[4] = { BlueNoneRedOff, BlueOnRedOff, 0, BlueOnRedNone };
Handler bothOn[4] = { BlueOffRedOff, BlueNoneRedOff, BlueOffRedNone, 0 };
Handler* handlers[4] = { bothOff, blueOn, redOn, bothOn };
int main(void) {
Handler* current = bothOff;
for(int n;;) {
scanf("%d", &n
); // signal from microcontroller if(n < 0 || n > 3) break;
if(current[n]) {
current[n]();
current = handlers[n];
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CnR5cGVkZWYgdm9pZCAoKkhhbmRsZXIpKHZvaWQpOwoKLy8gbWljcm9jb250cm9sbGVyIGNvbW1hbmRzCnZvaWQgQmx1ZU9uKHZvaWQpICB7IHByaW50ZiAoItCS0LrQu9GO0YfQsNC10Lwg0YHQuNC90LjQuS4gIik7IH0Kdm9pZCBCbHVlT2ZmKHZvaWQpIHsgcHJpbnRmICgi0JLRi9C60LvRjtGH0LDQtdC8INGB0LjQvdC40LkuICIpOyB9CnZvaWQgUmVkT24odm9pZCkgICB7IHByaW50ZiAoItCS0LrQu9GO0YfQsNC10Lwg0LrRgNCw0YHQvdGL0LkuICIpOyB9CnZvaWQgUmVkT2ZmKHZvaWQpICB7IHByaW50ZiAoItCS0YvQutC70Y7Rh9Cw0LXQvCDQutGA0LDRgdC90YvQuS4gIik7IH0KCi8vIGhhbmRsZXJzIGZvciB0aGUgc2lnbmFscwp2b2lkIEJsdWVPblJlZE9uKHZvaWQpIHsgQmx1ZU9uKCk7IFJlZE9uKCk7IH0Kdm9pZCBCbHVlT25SZWROb25lKHZvaWQpIHsgQmx1ZU9uKCk7IH0Kdm9pZCBCbHVlT25SZWRPZmYodm9pZCkgeyBCbHVlT24oKTsgUmVkT2ZmKCk7IH0Kdm9pZCBCbHVlTm9uZVJlZE9uKHZvaWQpIHsgUmVkT24oKTsgfQp2b2lkIEJsdWVOb25lUmVkT2ZmKHZvaWQpIHsgUmVkT2ZmKCk7IH0Kdm9pZCBCbHVlT2ZmUmVkT24odm9pZCkgeyBCbHVlT2ZmKCk7IFJlZE9uKCk7IH0Kdm9pZCBCbHVlT2ZmUmVkTm9uZSh2b2lkKSB7IEJsdWVPZmYoKTsgfQp2b2lkIEJsdWVPZmZSZWRPZmYodm9pZCkgeyBCbHVlT2ZmKCk7IFJlZE9mZigpOyB9CgovLyBqdW1wIHRhYmxlCkhhbmRsZXIgYm90aE9mZls0XSA9IHsgMCwgQmx1ZU9uUmVkTm9uZSwgQmx1ZU5vbmVSZWRPbiwgQmx1ZU9uUmVkT24gfTsKSGFuZGxlciBibHVlT25bNF0gPSB7IEJsdWVPZmZSZWROb25lLCAwLCBCbHVlT2ZmUmVkT24sIEJsdWVOb25lUmVkT24gfTsKSGFuZGxlciByZWRPbls0XSA9IHsgQmx1ZU5vbmVSZWRPZmYsIEJsdWVPblJlZE9mZiwgMCwgQmx1ZU9uUmVkTm9uZSB9OwpIYW5kbGVyIGJvdGhPbls0XSA9IHsgQmx1ZU9mZlJlZE9mZiwgQmx1ZU5vbmVSZWRPZmYsIEJsdWVPZmZSZWROb25lLCAwIH07CkhhbmRsZXIqIGhhbmRsZXJzWzRdID0geyBib3RoT2ZmLCBibHVlT24sIHJlZE9uLCBib3RoT24gfTsKCmludCBtYWluKHZvaWQpIHsKICAgIEhhbmRsZXIqIGN1cnJlbnQgPSBib3RoT2ZmOwogICAgZm9yKGludCBuOzspIHsKICAgICAgICBzY2FuZigiJWQiLCAmbik7IC8vIHNpZ25hbCBmcm9tIG1pY3JvY29udHJvbGxlcgogICAgICAgIGlmKG4gPCAwIHx8IG4gPiAzKSBicmVhazsKICAgICAgICBpZihjdXJyZW50W25dKSB7CiAgICAgICAgICAgIGN1cnJlbnRbbl0oKTsKICAgICAgICAgICAgY3VycmVudCA9IGhhbmRsZXJzW25dOwogICAgICAgIH0KICAgICAgICBwcmludGYoItCT0L7RgtC+0LLQviFcbiIpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K