Compare commits

...

2 commits

Author SHA1 Message Date
b4232c905d added line precessing 2024-12-02 20:57:33 +13:00
0d4f948ff5 read each element of a line 2024-12-02 19:54:23 +13:00
5 changed files with 1072 additions and 1 deletions

5
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,5 @@
{
"files.associations": {
"*.tcc": "cpp"
}
}

4
.vscode/tasks.json vendored
View file

@ -3,8 +3,10 @@
{ {
"type": "cppbuild", "type": "cppbuild",
"label": "C/C++: gcc build active file", "label": "C/C++: gcc build active file",
"command": "/usr/bin/gcc", "command": "/usr/bin/g++",
"args": [ "args": [
"--std",
"gnu++23",
"-fdiagnostics-color=always", "-fdiagnostics-color=always",
"-g", "-g",
"${file}", "${file}",

1000
2/input.txt Normal file

File diff suppressed because it is too large Load diff

BIN
2/puzzle2 Executable file

Binary file not shown.

64
2/puzzle2.cpp Normal file
View file

@ -0,0 +1,64 @@
#include <stdio.h>
#include <list>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
enum Direction {
UP,
DOWN
};
int main(){
string line;
int safeReports = 0;
ifstream puzzle("input.txt", ifstream::in);
while (getline(puzzle, line)) {
istringstream lineStream(line);
string numberString;
list<int> currentLevels;
while (getline(lineStream, numberString, ' ')) {
int number = stoi(numberString);
currentLevels.push_back(number);
}
int numOfLevelsInLine = currentLevels.size();
int numOfLevelsProcessed = 0;
//need to pull the first one to have something to compare to
enum Direction dir;
int prevlevel = currentLevels.front();
currentLevels.pop_front();
numOfLevelsProcessed++;
if (prevlevel - currentLevels.front()>0){
dir = UP;
} else if (prevlevel - currentLevels.front()< 0){
dir = DOWN;
} else {
break;
}
for (int level = 0; !currentLevels.empty();level=currentLevels.front()){
if (abs(prevlevel-level)>3) {currentLevels.clear();break;}
if(prevlevel-level==0){ currentLevels.clear();break;}
if(dir==UP&&(prevlevel-currentLevels.front())<0) {currentLevels.clear();break;}
if(dir==DOWN&&(prevlevel-currentLevels.front()>0)) {currentLevels.clear();break;}
prevlevel=currentLevels.front();
currentLevels.pop_front();
if(numOfLevelsProcessed==numOfLevelsInLine){
safeReports++;
}
}
}
cout << safeReports;
puzzle.close();
}