project-euler

https://projecteuler.net/
Log | Files | Refs | README

Euler_11.cpp (1746B)


      1 #include <fstream>
      2 
      3 #include "Euler.h"
      4 
      5 void SumDigits(std::vector<int> &digits, int &greatestProduct)
      6 {
      7     int temp = digits[0];
      8 
      9     for(unsigned int j = 1; j < digits.size(); ++j)
     10         temp *= digits[j];
     11 
     12     if (temp > greatestProduct)
     13         greatestProduct = temp;
     14 }
     15 
     16 int Euler::LargestProductInGrid()
     17 {
     18     std::ifstream fin;
     19     fin.open("files/p11_grid.txt");
     20     std::string grid;
     21     std::getline(fin, grid);
     22     fin.close();
     23 
     24     std::vector<int> numGrid = EulerUtility::tokenizer(grid, ' ');
     25 
     26     int greatestProduct = 0;
     27 
     28     for (int i = 0; i < 20; ++i) {
     29         for (int j = 0; j <= 20 - 4; ++j)
     30         {
     31             std::vector<int> digits;
     32 
     33             for (int k = 0; k < 4; ++k)
     34                 digits.push_back(numGrid[i * 20 + j + k]);
     35 
     36             SumDigits(digits, greatestProduct);
     37         }
     38     }
     39 
     40     for (int i = 0; i <= 20 - 4; ++i){
     41         for (int j = 0; j < 20; ++j)
     42         {
     43             std::vector<int> digits;
     44 
     45             for (int k = 0; k < 4; ++k)
     46                 digits.push_back(numGrid[i + j * 20 + k]);
     47 
     48             SumDigits(digits, greatestProduct);
     49         }
     50     }
     51 
     52     for (int i = 0; i < 20 - 4; ++i) {
     53         for (int j = 0; j <= 20 - 4; ++j)
     54         {
     55             std::vector<int> digits;
     56 
     57             for (int k = 0; k < 4; ++k)
     58                 digits.push_back(numGrid[(i + k) * 20 + j + k]);
     59 
     60             SumDigits(digits, greatestProduct);
     61         }
     62     }
     63 
     64     for (int i = 0; i < 20 - 4; ++i) {
     65         for (int j = 19; j >= 3; --j)
     66         {
     67             std::vector<int> digits;
     68 
     69             for (int k = 0; k < 4; ++k)
     70                 digits.push_back(numGrid[(i + k) * 20 + j - k]);
     71 
     72             SumDigits(digits, greatestProduct);
     73         }
     74     }
     75 
     76     return greatestProduct;
     77 }