#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 BlueNoneRedNone(void) { }
void BlueNoneRedOff(void) { RedOff(); }
void BlueOffRedOn(void) { BlueOff(); RedOn(); }
void BlueOffRedNone(void) { BlueOff(); }
void BlueOffRedOff(void) { BlueOff(); RedOff(); }
// jump table
Handler bothOff[4] = { BlueNoneRedNone, BlueOnRedNone, BlueNoneRedOn, BlueOnRedOn };
Handler blueOn[4] = { BlueOffRedNone, BlueNoneRedNone, BlueOffRedOn, BlueNoneRedOn };
Handler redOn[4] = { BlueNoneRedOff, BlueOnRedOff, BlueNoneRedNone, BlueOnRedNone };
Handler bothOn[4] = { BlueOffRedOff, BlueNoneRedOff, BlueOffRedNone, BlueNoneRedNone };
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;
current[n]();
current = handlers[n];
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CnR5cGVkZWYgdm9pZCAoKkhhbmRsZXIpKHZvaWQpOwoKLy8gbWljcm9jb250cm9sbGVyIGNvbW1hbmRzCnZvaWQgQmx1ZU9uKHZvaWQpICB7IHByaW50ZiAoItCS0LrQu9GO0YfQsNC10Lwg0YHQuNC90LjQuS4gIik7IH0Kdm9pZCBCbHVlT2ZmKHZvaWQpIHsgcHJpbnRmICgi0JLRi9C60LvRjtGH0LDQtdC8INGB0LjQvdC40LkuICIpOyB9CnZvaWQgUmVkT24odm9pZCkgICB7IHByaW50ZiAoItCS0LrQu9GO0YfQsNC10Lwg0LrRgNCw0YHQvdGL0LkuICIpOyB9CnZvaWQgUmVkT2ZmKHZvaWQpICB7IHByaW50ZiAoItCS0YvQutC70Y7Rh9Cw0LXQvCDQutGA0LDRgdC90YvQuS4gIik7IH0KCi8vIGhhbmRsZXJzIGZvciB0aGUgc2lnbmFscwp2b2lkIEJsdWVPblJlZE9uKHZvaWQpIHsgQmx1ZU9uKCk7IFJlZE9uKCk7IH0Kdm9pZCBCbHVlT25SZWROb25lKHZvaWQpIHsgQmx1ZU9uKCk7IH0Kdm9pZCBCbHVlT25SZWRPZmYodm9pZCkgeyBCbHVlT24oKTsgUmVkT2ZmKCk7IH0Kdm9pZCBCbHVlTm9uZVJlZE9uKHZvaWQpIHsgUmVkT24oKTsgfQp2b2lkIEJsdWVOb25lUmVkTm9uZSh2b2lkKSB7IH0Kdm9pZCBCbHVlTm9uZVJlZE9mZih2b2lkKSB7IFJlZE9mZigpOyB9CnZvaWQgQmx1ZU9mZlJlZE9uKHZvaWQpIHsgQmx1ZU9mZigpOyBSZWRPbigpOyB9CnZvaWQgQmx1ZU9mZlJlZE5vbmUodm9pZCkgeyBCbHVlT2ZmKCk7IH0Kdm9pZCBCbHVlT2ZmUmVkT2ZmKHZvaWQpIHsgQmx1ZU9mZigpOyBSZWRPZmYoKTsgfQoKLy8ganVtcCB0YWJsZQpIYW5kbGVyIGJvdGhPZmZbNF0gPSB7IEJsdWVOb25lUmVkTm9uZSwgQmx1ZU9uUmVkTm9uZSwgQmx1ZU5vbmVSZWRPbiwgQmx1ZU9uUmVkT24gfTsKSGFuZGxlciBibHVlT25bNF0gPSB7IEJsdWVPZmZSZWROb25lLCBCbHVlTm9uZVJlZE5vbmUsIEJsdWVPZmZSZWRPbiwgQmx1ZU5vbmVSZWRPbiB9OwpIYW5kbGVyIHJlZE9uWzRdID0geyBCbHVlTm9uZVJlZE9mZiwgQmx1ZU9uUmVkT2ZmLCBCbHVlTm9uZVJlZE5vbmUsIEJsdWVPblJlZE5vbmUgfTsKSGFuZGxlciBib3RoT25bNF0gPSB7IEJsdWVPZmZSZWRPZmYsIEJsdWVOb25lUmVkT2ZmLCBCbHVlT2ZmUmVkTm9uZSwgQmx1ZU5vbmVSZWROb25lIH07CkhhbmRsZXIqIGhhbmRsZXJzWzRdID0geyBib3RoT2ZmLCBibHVlT24sIHJlZE9uLCBib3RoT24gfTsKCmludCBtYWluKHZvaWQpIHsKICAgIEhhbmRsZXIqIGN1cnJlbnQgPSBib3RoT2ZmOwogICAgZm9yKDs7KSB7CiAgICAgICAgaW50IG47CiAgICAgICAgc2NhbmYoIiVkIiwgJm4pOyAvLyBzaWduYWwgZnJvbSBtaWNyb2NvbnRyb2xsZXIKICAgICAgICBpZihuIDwgMCB8fCBuID4gMykgYnJlYWs7CiAgICAgICAgY3VycmVudFtuXSgpOwogICAgICAgIGN1cnJlbnQgPSBoYW5kbGVyc1tuXTsKICAgICAgICBwcmludGYoItCT0L7RgtC+0LLQviFcbiIpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K