#include fstream inFile("computer.in",ios::in); int mem[32]; int mem2[32]; int acc; int pc; #define code(x) (0xE0 & x) #define addr(x) (0x1F & x) void solveCase() { acc = 0; pc = 0; int aktCode = mem[0]; // for (int i = 0; i < 32; i++) { // cout << i << ": " << hex << mem[i] << endl; // } // cout << endl << endl; while (code(aktCode) != 0xE0) { pc++; // cout << hex << acc << " " << pc << " " << hex << aktCode << " " << // hex << code(aktCode) << " " << hex << addr(aktCode) << endl; switch (code(aktCode)) { case 0x00: // Sta X mem[addr(aktCode)] = acc; break; case 0x20: // Lda X acc = mem[addr(aktCode)]; break; case 0x40: //beq X if (acc == 0) { pc = addr(aktCode); } break; case 0x60: // NOP break; case 0x80: // DEC acc--; if (acc < 0) acc = 255; break; case 0xA0: // INC acc++; if (acc > 255) acc = 0; break; case 0xC0: // JMP x pc = addr(aktCode); break; case 0xE0: // HLT break; } aktCode = mem[pc]; } for (int i = 7; i >= 0; i--) { if (acc & (1 << i)) cout << '1'; else cout << '0'; } cout << endl; } void readCase() { char aktByte[8]; for (int i = 0; i < 32; i++) { mem[i] = 0; inFile >> aktByte; int bitPos = 7; for (int j = 0; j < 8; j++) { if (aktByte[j] == '1') mem[i] |= (1 << bitPos); mem2[i] = mem[i]; bitPos--; // cout << mem[i] << " " << bitPos << " " << aktByte[j] << endl; } // cout << i << ": " << mem[i] << endl << endl; } } int main() { while (inFile) { readCase(); if (inFile.eof()) return 0; solveCase(); } return 0; }