Advertisement
Kryukov_And

Untitled

Dec 9th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int reg[100] = {0}, h = 0, t = -1, n = 0, i = 0;
  6. unsigned short a[100010];
  7. string s[100010];
  8.  
  9. void put(int x);
  10. int get();
  11. int findmark(string x);
  12. string tostr(string x);
  13. string tostr1(string x);
  14. string tostr2(string x);
  15. int toint(string x);
  16. int del(int x, int y);
  17. int mod(int x, int y);
  18.  
  19. ifstream in("quack.in");
  20. ofstream out("quack.out");
  21.  
  22. int main()
  23. {
  24.     while (in >> s[n++]);
  25.  
  26.     while (i < n)
  27.     {
  28.         if (s[i][0] == '+')
  29.             put((get() + get()) % 65536);
  30.         else if (s[i][0] == '-')
  31.             put((get() - get()) % 65536);
  32.         else if (s[i][0] == '*')
  33.             put((get() * get()) % 65536);
  34.         else if (s[i][0] == '/')
  35.             put(del(get(), get()));
  36.         else if (s[i][0] == '%')
  37.             put(mod(get(), get()));
  38.         else if (s[i][0] == '>')
  39.             reg[s[i][1] - 'a'] = get();
  40.         else if (s[i][0] == '<')
  41.             put(reg[s[i][1] - 'a']);
  42.         else if ((s[i][0] == 'P') && (s[i].size() > 1))
  43.             out << reg[s[i][1] - 'a'] << endl;
  44.         else if (s[i][0] == 'P')
  45.             out << get() << endl;
  46.         else if ((s[i][0] == 'C') && (s[i].size() > 1))
  47.             out << char(reg[s[i][1] - 'a'] % 256);
  48.         else if (s[i][0] == 'C')
  49.             out << char(get() % 256);
  50.         else if (s[i][0] == 'J')
  51.             i = findmark(tostr(s[i]));
  52.         else if ((s[i][0] == 'Z') && (reg[s[i][1] - 'a'] == 0))
  53.             i = findmark(tostr1(s[i]));
  54.         else if ((s[i][0] == 'E') && (reg[s[i][1] - 'a'] == reg[s[i][2] - 'a']))
  55.             i = findmark(tostr2(s[i]));
  56.         else if ((s[i][0] == 'G')  && (reg[s[i][1] - 'a'] > reg[s[i][2] - 'a']))
  57.             i = findmark(tostr2(s[i]));
  58.         else if (s[i][0] == 'Q')
  59.             return 0;
  60.         else if (isdigit(s[i][0]))
  61.             put(toint(s[i]));
  62.         i++;
  63.     }
  64.     return 0;
  65. }
  66.  
  67. void put(int x)
  68. {
  69.     a[h++] = x;
  70. }
  71.  
  72. int get()
  73. {
  74.     return a[++t];
  75. }
  76.  
  77. int findmark(string x)
  78. {
  79.     for (int j = 0; j < n; j++)
  80.         if ((x == tostr(s[j])) && (s[j][0] == ':'))
  81.             return j;
  82. }
  83.  
  84. string tostr(string x)
  85. {
  86.     string y = "";
  87.     for(int z = 1; z < x.size(); z++)
  88.         y += x[z];
  89.     return y;
  90. }
  91.  
  92. string tostr1(string x)
  93. {
  94.     string y = "";
  95.     for(int z = 2; z < x.size(); z++)
  96.         y += x[z];
  97.     return y;
  98. }
  99.  
  100. string tostr2(string x)
  101. {
  102.     string y = "";
  103.     for(int z = 3; z < x.size(); z++)
  104.         y += x[z];
  105.     return y;
  106. }
  107.  
  108. int toint(string x)
  109. {
  110.     int y = 0;
  111.     for (int z = 0; z < x.size(); z++)
  112.         y = y * 10 + x[z] - '0';
  113.     return y;
  114. }
  115.  
  116. int del(int y, int x)
  117. {
  118.     if (y == 0)
  119.         return 0;
  120.     else return x / y;
  121. }
  122.  
  123. int mod(int y, int x)
  124. {
  125.     if (y == 0)
  126.         return 0;
  127.     else return x % y;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement