mikronik24

Untitled

Dec 6th, 2021
464
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3. #include <math.h>
  4. #include <vector>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8. #define _ROWS 1000
  9. #define _COLS 12
  10.  
  11. int bin2dec(string s)
  12. {
  13.     int result = 0;
  14.     int k = 0;
  15.  
  16.     for(int i = s.length()-1; i >= 0; i--){
  17.         result += ((int)s[i]-'0') * pow(2, k);
  18.         k++;
  19.     }
  20.     return result;
  21. }
  22.  
  23. void read_values(string* tablica, ifstream &wej)
  24. {
  25.     string tmp;
  26.     int i = 0;
  27.  
  28.     while(wej >> tmp){
  29.         tablica[i] = tmp;
  30.         i++;
  31.     }
  32. }
  33.  
  34. int most_common_bit_OXYGEN(vector<string> tab, int column, int rows, bool oxygen)
  35. {
  36.     int tmp_0 = 0,
  37.         tmp_1 = 0;
  38.  
  39.     for(int i = 0; i < rows; i++){
  40.             if(tab[i][column] == '0')
  41.                 tmp_0++;
  42.             else tmp_1++;
  43.     }
  44.  
  45.     cout << endl;
  46.  
  47.  
  48.  
  49.  
  50.     if(tmp_1 == tmp_0){
  51.         if(oxygen)
  52.             return 1;
  53.         else return 0;
  54.     }
  55.  
  56.     if(tmp_0 > tmp_1)
  57.     {
  58.         if(oxygen)
  59.         {
  60.             return 0;
  61.         }
  62.         else
  63.         {
  64.             return 1;
  65.         }
  66.     }
  67.  
  68.  
  69.     if(tmp_1 > tmp_0)
  70.     {
  71.         if(oxygen)
  72.         {
  73.             return 1;
  74.         }
  75.         else
  76.         {
  77.             return 0;
  78.         }
  79.     }
  80.  
  81.  
  82.  
  83.  
  84.  
  85. }
  86.  
  87. string rate(string *tab, bool gamma){
  88.     string result = "";
  89.     int tmp_0 = 0,
  90.         tmp_1 = 0;
  91.  
  92.     for(int i = 0; i < _COLS; i++){
  93.         tmp_1 = 0;
  94.         tmp_0 = 0;
  95.         for(int j = 0; j < _ROWS; j++){
  96.             if(tab[j][i] == '0')
  97.                 tmp_0++;
  98.             else tmp_1++;
  99.         }
  100.  
  101.         if(gamma == true){
  102.             if(tmp_1 > tmp_0)
  103.                 result += "1";
  104.             else result += "0";
  105.         }else {
  106.             if(tmp_1 > tmp_0)
  107.                 result += "0";
  108.             else result += "1";
  109.         }
  110.     }
  111.     return result;
  112. }
  113.  
  114. string oxygen_generator_rating(string *tab, bool oxygen)
  115. {
  116.     int current_bit_pos = 0;
  117.     int MCB;
  118.     int tmp_val;
  119.     vector<string> v;
  120.     string tmp;
  121.  
  122.  
  123.     for(int i = 0; i < _ROWS; i++){
  124.         v.push_back(tab[i]);
  125.     }
  126.  
  127.     while(v.size() > 1){
  128.         if(oxygen == true)
  129.             MCB = most_common_bit_OXYGEN(v, current_bit_pos, v.size(), true);
  130.         else MCB = most_common_bit_OXYGEN(v, current_bit_pos, v.size(), false);
  131.  
  132.         for(int j = 0; j < v.size(); j++)
  133.         {
  134.             tmp = v[j];
  135.             tmp_val = ((int)tmp[current_bit_pos]-'0');
  136.  
  137.  
  138.             if(tmp_val != MCB){
  139.                 v.erase(find(v.begin(), v.end(), tmp));
  140.                 j--;
  141.             }
  142.         }
  143.  
  144.  
  145.  
  146.         current_bit_pos++;
  147.     }
  148.  
  149.  
  150.     return v[0];
  151. }
  152.  
  153.  
  154. int main()
  155. {
  156.     ifstream inp("input.txt");
  157.     string * tab = new string[_ROWS];
  158.     string * tab2 = new string[_ROWS];  
  159.     int gamma_rate,
  160.         epsilon_rate;
  161.     int consumption_power, oxygen_rate, co2_rate, life_rate;
  162.    
  163.     read_values(tab, inp);
  164.     for(int i = 0; i < _ROWS; i++){
  165.         tab2[i] = tab[i];
  166.     }
  167.  
  168.  
  169.     gamma_rate = bin2dec(rate(tab, true));
  170.     epsilon_rate = bin2dec(rate(tab, false));
  171.     oxygen_rate = bin2dec(oxygen_generator_rating(tab, true));
  172.     co2_rate = bin2dec(oxygen_generator_rating(tab2, false));
  173.    
  174.     consumption_power = gamma_rate * epsilon_rate;
  175.     life_rate = oxygen_rate * co2_rate;
  176.  
  177.     cout << endl << endl;
  178.     cout << "oxygen_rate : " << oxygen_rate << endl;
  179.     cout << "co2_rate : " << co2_rate << endl;
  180.     cout << "gamma_rate : " << gamma_rate << endl;
  181.     cout << "epsilon_rate : " << epsilon_rate << endl;
  182.     cout << "consumption power : " << consumption_power << endl;
  183.     cout << "life_rate : " << life_rate << endl;
  184.  
  185.  
  186.  
  187.     inp.close();
  188.     return 0;
  189. }
RAW Paste Data