correctly identifies safe lines

This commit is contained in:
Seth Samuel 2024-12-02 21:33:35 +13:00
parent b4232c905d
commit a5ce4e5803
3 changed files with 12 additions and 8 deletions

View file

@ -1,3 +1,4 @@
81 83 84 85 87
87 90 92 95 96 93 87 90 92 95 96 93
12 15 16 17 17 12 15 16 17 17
26 27 29 31 34 36 40 26 27 29 31 34 36 40
@ -994,7 +995,6 @@
54 52 49 47 46 54 52 49 47 46
18 15 13 12 9 18 15 13 12 9
32 33 36 38 40 42 45 32 33 36 38 40 42 45
81 83 84 85 87
73 70 69 66 65 62 60 58 73 70 69 66 65 62 60 58
89 91 92 93 94 96 97 89 91 92 93 94 96 97
58 56 55 52 49 48 45 43 58 56 55 52 49 48 45 43

BIN
2/puzzle2

Binary file not shown.

View file

@ -16,10 +16,13 @@ enum Direction {
int main(){ int main(){
string line; string line;
int safeReports = 0; int safeReports = 0;
stringstream wholeDoc;
ifstream puzzle("input.txt", ifstream::in); ifstream puzzle("input.txt", ifstream::in);
wholeDoc << puzzle.rdbuf();
while (getline(puzzle, line)) { while (getline(puzzle, line)) {
cout << line<<"\n";
istringstream lineStream(line); istringstream lineStream(line);
string numberString; string numberString;
list<int> currentLevels; list<int> currentLevels;
@ -36,23 +39,24 @@ int main(){
int prevlevel = currentLevels.front(); int prevlevel = currentLevels.front();
currentLevels.pop_front(); currentLevels.pop_front();
numOfLevelsProcessed++; numOfLevelsProcessed++;
if (prevlevel - currentLevels.front()>0){ if (prevlevel < currentLevels.front()){
dir = UP;
} else if (prevlevel - currentLevels.front()< 0){
dir = DOWN; dir = DOWN;
} else if (prevlevel > currentLevels.front()){
dir = UP;
} else { } else {
break; break;
} }
for (int level = 0; !currentLevels.empty();level=currentLevels.front()){ for (int level = currentLevels.front(); !currentLevels.empty();level=currentLevels.front()){
if (abs(prevlevel-level)>3) {currentLevels.clear();break;} if (abs(prevlevel-level)>3) {currentLevels.clear();break;}
if(prevlevel-level==0){ currentLevels.clear();break;} if(prevlevel==level){ currentLevels.clear();break;}
if(dir==UP&&(prevlevel-currentLevels.front())<0) {currentLevels.clear();break;} if(dir==UP&&(prevlevel<currentLevels.front())) {currentLevels.clear();break;}
if(dir==DOWN&&(prevlevel-currentLevels.front()>0)) {currentLevels.clear();break;} if(dir==DOWN&&(prevlevel>currentLevels.front())) {currentLevels.clear();break;}
prevlevel=currentLevels.front(); prevlevel=currentLevels.front();
currentLevels.pop_front(); currentLevels.pop_front();
numOfLevelsProcessed++;
if(numOfLevelsProcessed==numOfLevelsInLine){ if(numOfLevelsProcessed==numOfLevelsInLine){
safeReports++; safeReports++;