Source: http://projecteuler.net/index.php?section=problems&id=11
Quick overview: Take a 20x20 grid of numbers and compute the largest product of 4 pairs of numbers in either horizontal, vertical, or diagonal.
My current approach is to divide the 20x20 grid up into single rows and single columns and go from there with a much more manageable grid. The code I'm using to divide the rows into rows is
void fillRows
( string::const_iterator& fieldIter,
list<int>& rowElements,
vector<list<int>>& rows )
{
// fieldIter is already initialized.
int count(0);
for( ; fieldIter < field.end(); ++fieldIter )
{
if(isdigit(field[*fieldIter]))
{
rowElements.push_back(toInt(field[*fieldIter]));
++count;
}
if(count == 40)
{
rows.push_back(rowElements);
count = 0;
rowElements.clear();
}
}
}
Short explanation:
I have the field set as static const std::string field
and I am filling a vector with lists of rows. Why a list? Because the queue doesn't have a clear function. Also practice using STL container lists and not ones I write myself.
However, this thing isn't working. Oftentimes I see it omitting a character( function toInt parses the const char as int ) and I end up with 18 rows, two rows short of the 20x20 grid. The length of the rows seem good.
Rows: 18
RowElements[0]: 40
(instead of pairs I saved each number individually. Will fix that later)
What am I doing wrong?