#include #include #include int main(int argc, char **argv) { if (argc == 1) { std::cerr << "No input given"; return 1; } char* ops = argv[1]; std::vector tape = { 0 }; int oix = 0; int tix = 0; int len = strlen(ops); while (oix < len) { switch (ops[oix]) { case '>': tix++; if (tix >= tape.size()) { tape.push_back(0); } oix++; break; case '<': tix--; if (tix < 0) { std::cerr << "Out of bounds"; return 1; } oix++; break; case '+': tape[tix]++; oix++; break; case '-': tape[tix]--; oix++; break; case '.': std::cout << tape[tix]; oix++; break; case ',': std::cin >> tape[tix]; oix++; break; case '[': if (tape[tix] == 0) { int ls = 0; int rs = 0; for (int i = oix; i < len; i++) { switch (ops[i]) { case '[': ls++; break; case ']': rs++; break; default: break; } if (ls == rs) { oix = i + 1; break; } } } else { oix++; } break; case ']': if (tape[tix] != 0) { int ls = 0; int rs = 0; for (int i = oix; i >= 0; i--) { switch (ops[i]) { case '[': ls++; break; case ']': rs++; break; default: break; } if (ls == rs) { oix = i + 1; break; } } } else { oix++; } break; default: oix++; } } return 0; }