You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.2 KiB
C
69 lines
1.2 KiB
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
//#define _DEBUG
|
|
int check_registers(int a, int b, int max_reg);
|
|
int main() {
|
|
int max_reg = 4;
|
|
#ifdef REGISTERS
|
|
max_reg = REGISTERS;
|
|
#endif
|
|
/* A, B, C, D. Indice + 5 */
|
|
uint8_t reg[4] = {0, 0, 0, 0};
|
|
int i;
|
|
uint8_t a, b;
|
|
uint8_t x;
|
|
|
|
#ifdef _DEBUG
|
|
printf("%hhu\n", x);
|
|
#endif
|
|
|
|
while (1) {
|
|
x = getchar() - '0';
|
|
#ifdef _DEBUG
|
|
printf("x:%hhu\n", x);
|
|
#endif
|
|
switch (x) {
|
|
case 0:
|
|
return 0;
|
|
break;
|
|
case 1:
|
|
scanf("%hhu %hhu\n", &a, &b);
|
|
if (check_registers(a, b, max_reg)) {
|
|
printf("-1\n");
|
|
return 0;
|
|
}
|
|
reg[a-5] += reg[b-5];
|
|
break;
|
|
case 2:
|
|
scanf("%hhu %hhu\n", &a, &b);
|
|
if(check_registers(a, b, max_reg)) {
|
|
printf("-1\n");
|
|
return 0;
|
|
}
|
|
reg[a-5] -= reg[b-5];
|
|
break;
|
|
case 3:
|
|
scanf("%hhu %hhu\n", &a, &b);
|
|
if(check_registers(a, 0, max_reg)) {
|
|
printf("-1\n");
|
|
return 0;
|
|
}
|
|
reg[a-5] = b;
|
|
break;
|
|
case 4:
|
|
for (i = 0; i < max_reg; ++i)
|
|
printf("%hhu ", reg[i]);
|
|
putchar('\n');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
int check_registers(int a, int b, int max_reg) {
|
|
a -= 5;
|
|
b -= 5;
|
|
if ((a >= max_reg) || (b >= max_reg))
|
|
return 1;
|
|
return 0;
|
|
}
|