Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int reg[100] = {0}, h = 0, t = -1, n = 0, i = 0;
- unsigned short a[100010];
- string s[100010];
- void put(int x);
- int get();
- int findmark(string x);
- string tostr(string x);
- string tostr1(string x);
- string tostr2(string x);
- int toint(string x);
- int del(int x, int y);
- int mod(int x, int y);
- ifstream in("quack.in");
- ofstream out("quack.out");
- int main()
- {
- while (in >> s[n++]);
- while (i < n)
- {
- if (s[i][0] == '+')
- put((get() + get()) % 65536);
- else if (s[i][0] == '-')
- put((get() - get()) % 65536);
- else if (s[i][0] == '*')
- put((get() * get()) % 65536);
- else if (s[i][0] == '/')
- put(del(get(), get()));
- else if (s[i][0] == '%')
- put(mod(get(), get()));
- else if (s[i][0] == '>')
- reg[s[i][1] - 'a'] = get();
- else if (s[i][0] == '<')
- put(reg[s[i][1] - 'a']);
- else if ((s[i][0] == 'P') && (s[i].size() > 1))
- out << reg[s[i][1] - 'a'] << endl;
- else if (s[i][0] == 'P')
- out << get() << endl;
- else if ((s[i][0] == 'C') && (s[i].size() > 1))
- out << char(reg[s[i][1] - 'a'] % 256);
- else if (s[i][0] == 'C')
- out << char(get() % 256);
- else if (s[i][0] == 'J')
- i = findmark(tostr(s[i]));
- else if ((s[i][0] == 'Z') && (reg[s[i][1] - 'a'] == 0))
- i = findmark(tostr1(s[i]));
- else if ((s[i][0] == 'E') && (reg[s[i][1] - 'a'] == reg[s[i][2] - 'a']))
- i = findmark(tostr2(s[i]));
- else if ((s[i][0] == 'G') && (reg[s[i][1] - 'a'] > reg[s[i][2] - 'a']))
- i = findmark(tostr2(s[i]));
- else if (s[i][0] == 'Q')
- return 0;
- else if (isdigit(s[i][0]))
- put(toint(s[i]));
- i++;
- }
- return 0;
- }
- void put(int x)
- {
- a[h++] = x;
- }
- int get()
- {
- return a[++t];
- }
- int findmark(string x)
- {
- for (int j = 0; j < n; j++)
- if ((x == tostr(s[j])) && (s[j][0] == ':'))
- return j;
- }
- string tostr(string x)
- {
- string y = "";
- for(int z = 1; z < x.size(); z++)
- y += x[z];
- return y;
- }
- string tostr1(string x)
- {
- string y = "";
- for(int z = 2; z < x.size(); z++)
- y += x[z];
- return y;
- }
- string tostr2(string x)
- {
- string y = "";
- for(int z = 3; z < x.size(); z++)
- y += x[z];
- return y;
- }
- int toint(string x)
- {
- int y = 0;
- for (int z = 0; z < x.size(); z++)
- y = y * 10 + x[z] - '0';
- return y;
- }
- int del(int y, int x)
- {
- if (y == 0)
- return 0;
- else return x / y;
- }
- int mod(int y, int x)
- {
- if (y == 0)
- return 0;
- else return x % y;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement