Guest User

--- Day 10: Adapter Array ---

a guest
Dec 10th, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <array>
  5. #include <algorithm>
  6.  
  7. std::vector<int> adapters;
  8.  
  9. int CalculateDifference(int outlet, int adapter)
  10. {
  11.     int diff = adapter - outlet;
  12.     return diff;
  13. }
  14.  
  15. long long FindArrangements(std::string output = "0, ")
  16. {
  17.     //Part 1
  18.     int diff = 0;
  19.     int outlet = 0;
  20.     std::array<int, 3> numDiffs = { 0, 0, 0 };
  21.     for (unsigned int i = 1; i < adapters.size(); i++)
  22.     {
  23.         diff = CalculateDifference(outlet, adapters[i]);
  24.            
  25.         numDiffs[diff - 1]++;
  26.         outlet += diff;
  27.         output += std::to_string(outlet) + ", ";
  28.     }
  29.    
  30.     output += "[ ";
  31.     for (unsigned int i = 0; i < 3; i++)
  32.         output += std::to_string(numDiffs[i]) + " ";
  33.        
  34.     output += "]";
  35.    
  36.     std::cout << output << std::endl;
  37.    
  38.     //Part 2 - Result too low
  39.     std::vector<long long> path(adapters.size(), 0);
  40.     path[path.size() - 1] = 1;
  41.     for(int i = path.size() - 1; i >= 0; i--)
  42.     {
  43.         for (int j = i + 1; j < adapters.size(); j++)
  44.         {
  45.             if (adapters[j] - adapters[i] <= 3)
  46.                 path[i] += path[j];
  47.             else
  48.                 break;
  49.         }
  50.     }
  51.    
  52.     std::cout << "Arrangements: " << path[0] << std::endl;
  53.    
  54.     return 0;
  55. }
  56.  
  57. int main()
  58. {
  59.     int largest = 0;
  60.     std::string text;
  61.     while (getline(std::cin, text))
  62.     {
  63.         int a = atoi(text.c_str());
  64.         if (a > largest)
  65.             largest = a;
  66.        
  67.         adapters.push_back(a);
  68.     }
  69.    
  70.     adapters.push_back(0);
  71.     adapters.push_back(largest + 3);
  72.     std::sort(adapters.begin(), adapters.end());
  73.    
  74.     return FindArrangements();
  75. }
Advertisement
Add Comment
Please, Sign In to add comment