#include #include #include #include #include #include #include using namespace std; enum Direction { UP, DOWN }; int main(){ string line; int safeReports = 0; stringstream wholeDoc; ifstream puzzle("input.txt", ifstream::in); while (getline(puzzle, line)) { istringstream lineStream(line); string numberString; list currentLevels; while (getline(lineStream, numberString, ' ')) { int number = stoi(numberString); currentLevels.push_back(number); } int numOfLevelsInLine = currentLevels.size(); int numOfLevelsProcessed = 0; auto curListIt = currentLevels.begin(); curListIt++; //point to second item in list enum Direction dir; bool dirSet =false; //check first number, second number and last number to see if they all acend or deced //if not check second number, third number and last number to see if they accend or decend //then check first number, second number and second to last to see if they accend or decend //set direction if ((currentLevels.front()>currentLevels.back())&&(*curListIt) > currentLevels.back()){ dir = DOWN; dirSet=true; } else if((currentLevels.front()(*curListIt)&&(secondItem>currentLevels.back()))){ currentLevels.pop_front()//remove first item } } //need to pull the first one to have something to compare to int prevlevel = currentLevels.front(); currentLevels.pop_front(); numOfLevelsProcessed++; if (prevlevel < currentLevels.front()){ dir = DOWN; } else if (prevlevel > currentLevels.front()){ dir = UP; } else { currentLevels.clear(); } for (int level = currentLevels.front(); !currentLevels.empty();level=currentLevels.front()){ if (abs(prevlevel-level)>3) {currentLevels.clear();break;} if(prevlevel==level){ currentLevels.clear();break;} if(dir==UP&&(prevlevelcurrentLevels.front())) {currentLevels.clear();break;} prevlevel=currentLevels.front(); currentLevels.pop_front(); numOfLevelsProcessed++; if(numOfLevelsProcessed==numOfLevelsInLine){ safeReports++; } } } cout << safeReports; puzzle.close(); }