Advertisement
xxeell

wtf_i_make_a_monster

Oct 26th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.56 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class d_list_int
  6. {
  7. private:
  8.     int *content;
  9.     int c_count;
  10.     int c_lenght;
  11.     static const int max_count = 1024;
  12.  
  13.     void increase_size()
  14.     {
  15.         int *t = new int[c_lenght + 1];
  16.         for(int i = 0; i < c_lenght; i++)
  17.         {
  18.             t[i] = content[i];
  19.         }
  20.         content = t;
  21.         c_lenght++;
  22.     }
  23. public:
  24.     d_list_int()
  25.     {
  26.         content = new int {0};
  27.         c_count = 1;
  28.         c_lenght = 1;
  29.     }
  30.  
  31.     void push_at_back(int val)
  32.     {
  33.         if(c_count + 1 >= max_count)
  34.         {
  35.             cerr << "PEREPOLNRNIE STEKA!!!!!" << endl;
  36.             cerr << "ELEMENT NE DOBAVLEN!!!!" << endl;
  37.             return;
  38.         }
  39.         if(c_count + 1 >= c_lenght) increase_size();
  40.         content[c_count] = val;
  41.         c_count++;
  42.     }
  43.  
  44.     int get_last_val()
  45.     {
  46.         if(c_count < 2) return content[0];
  47.  
  48.         c_count--;
  49.         return content[c_count];
  50.     }
  51.  
  52.     int get_lenght()
  53.     {
  54.         return c_count;
  55.     }
  56.  
  57.     int get_first_val()
  58.     {
  59.         return content[0];
  60.     }
  61.  
  62.     void set_first_val(int val)
  63.     {
  64.         content[0] = val;
  65.     }
  66. };
  67.  
  68.  
  69. class d_list_pointer
  70. {
  71. private:
  72.     void* *content;
  73.     int c_count;
  74.     int c_lenght;
  75.     static const int max_count = 1024;
  76.  
  77.     void increase_size()
  78.     {
  79.         void* *t = new void*[c_lenght + 1];
  80.         for(int i = 0; i < c_lenght; i++)
  81.         {
  82.             t[i] = content[i];
  83.         }
  84.         content = t;
  85.         c_lenght++;
  86.     }
  87. public:
  88.     d_list_pointer(void *nlptr)
  89.     {
  90.         content = new void* {nlptr};
  91.         c_count = 1;
  92.         c_lenght = 1;
  93.     }
  94.  
  95.     void push_at_back(void *val)
  96.     {
  97.         if(c_count + 1 >= max_count)
  98.         {
  99.             cerr << "PEREPOLNRNIE STEKA!!!!!" << endl;
  100.             cerr << "ELEMENT NE DOBAVLEN!!!!" << endl;
  101.             return;
  102.         }
  103.         if(c_count + 1 >= c_lenght) increase_size();
  104.         content[c_count] = val;
  105.         c_count++;
  106.     }
  107.  
  108.     void* get_last_val()
  109.     {
  110.         if(c_count < 2) return content[0];
  111.  
  112.         c_count--;
  113.         return content[c_count];
  114.     }
  115.  
  116.     int get_lenght()
  117.     {
  118.         return c_count;
  119.     }
  120.  
  121.     void* get_first_val()
  122.     {
  123.         return content[0];
  124.     }
  125. };
  126.  
  127. int main()
  128. {
  129.     cout << "Hello world! Just do magick!" << endl;
  130.     int values[1024];
  131.     d_list_int prg_stack;
  132.     d_list_pointer prg_pointers(&&END_PROGRAM);
  133.     void *portal = &&START_PROGRAM;
  134.     goto *portal;
  135. // FUNCTIONS --------------------------------------------------------------------
  136. // Add(x, y) = x + y --
  137. func_add_2:
  138.     {
  139.         int a = prg_stack.get_last_val();
  140.         int b = prg_stack.get_last_val();
  141.         prg_stack.push_at_back(a + b);
  142.  
  143.         portal = prg_pointers.get_last_val();
  144.         goto *portal;
  145.     }
  146. // --------------------
  147. // Inc(x) = x + 1 -----
  148. func_inc_1:
  149.     {
  150.         int x = prg_stack.get_last_val();
  151.         x++;
  152.         prg_stack.push_at_back(x);
  153.  
  154.         portal = prg_pointers.get_last_val();
  155.         goto *portal;
  156.     }
  157. // --------------------
  158. // Negative(x) = -x ---
  159. func_negative_1:
  160.     {
  161.         int x = prg_stack.get_last_val();
  162.         prg_stack.push_at_back(-x);
  163.  
  164.         portal = prg_pointers.get_last_val();
  165.         goto *portal;
  166.     }
  167. // --------------------
  168. // Subtract(x, y) = x - y
  169. func_subtract_2:
  170.     {
  171.         prg_pointers.push_at_back(&&func_subtract_2_return_point_1);
  172.         goto func_negative_1;
  173.     func_subtract_2_return_point_1:
  174.         prg_pointers.push_at_back(&&func_subtract_2_return_point_2);
  175.         goto func_add_2;
  176.     func_subtract_2_return_point_2:
  177.  
  178.         portal = prg_pointers.get_last_val();
  179.         goto *portal;
  180.     }
  181. // --------------------
  182. // dec(x) = x - 1
  183. func_dec_1:
  184.     {
  185.         prg_stack.push_at_back(1);
  186.         prg_pointers.push_at_back(&&func_subtract_2_return_point_1);
  187.         goto func_subtract_2;
  188.     func_dec_1_return_point_1:
  189.  
  190.         portal = prg_pointers.get_last_val();
  191.         goto *portal;
  192.     }
  193. // --------------------
  194. // Min(x, y) ---------
  195. func_min_2:
  196.     {
  197.         int a = prg_stack.get_last_val();
  198.         int b = prg_stack.get_last_val();
  199.  
  200.         if(a < b) prg_stack.push_at_back(a);
  201.         else prg_stack.push_at_back(b);
  202.  
  203.         portal = prg_pointers.get_last_val();
  204.         goto *portal;
  205.     }
  206. // -------------------
  207. // Max(x, y) ---------
  208. func_max_2:
  209.     {
  210.         int a = prg_stack.get_last_val();
  211.         int b = prg_stack.get_last_val();
  212.  
  213.         if(a > b) prg_stack.push_at_back(a);
  214.         else prg_stack.push_at_back(b);
  215.  
  216.         portal = prg_pointers.get_last_val();
  217.         goto *portal;
  218.     }
  219. // -------------------
  220. // Mult(x, y) = x * y -
  221. func_mult_2:
  222.     {
  223.         int a = prg_stack.get_last_val();
  224.         int b = prg_stack.get_last_val();
  225.  
  226.         if(b == 0)
  227.         {
  228.             prg_stack.push_at_back(0);
  229.             portal = prg_pointers.get_last_val();
  230.             goto *portal;
  231.         }
  232.  
  233.         if(a < b)
  234.         {
  235.             prg_stack.push_at_back(a);
  236.             a = b;
  237.             b = prg_stack.get_last_val();
  238.         }
  239.  
  240.         prg_stack.push_at_back(0);
  241.         prg_stack.push_at_back(a);
  242.         prg_stack.push_at_back(b);
  243.  
  244.     func_mult_2_loop_1:
  245.         {
  246.             int b   = prg_stack.get_last_val();
  247.             int a   = prg_stack.get_last_val();
  248.             prg_stack.push_at_back(a);
  249.  
  250.             prg_pointers.push_at_back(&&func_mult_2_return_point_1); //
  251.             goto func_add_2;                                         // res += a;
  252.         func_mult_2_return_point_1:                                  //
  253.  
  254.             prg_stack.push_at_back(b);
  255.  
  256.             prg_pointers.push_at_back(&&func_mult_2_return_point_2); //
  257.             goto func_dec_1;                                         // b--;
  258.         func_mult_2_return_point_2:                                  //
  259.  
  260.             b = prg_stack.get_last_val();
  261.             if(b == 0)
  262.             {
  263.                 portal = prg_pointers.get_last_val();
  264.                 goto *portal;
  265.             }
  266.  
  267.             prg_stack.push_at_back(a);
  268.             prg_stack.push_at_back(b);
  269.             goto func_mult_2_loop_1;
  270.         }
  271.     }
  272. // --------------------
  273.  
  274. // START --------------------------------------------------------------------
  275. START_PROGRAM:
  276.  
  277.     int x, y, z;
  278.     cin >> x >> y;
  279.     prg_stack.push_at_back(x);
  280.     prg_stack.push_at_back(y);
  281.     prg_pointers.push_at_back(&&return_point_1);
  282.     goto func_mult_2;
  283. return_point_1:
  284.     z = prg_stack.get_last_val();
  285.     cout << z << endl;
  286.  
  287. END_PROGRAM:
  288. // END ----------------------------------------------------------------------
  289.     //getch();
  290.     return prg_stack.get_first_val();
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement