From 91adcabc8bfca56b5a510bda6107310cee228f3d Mon Sep 17 00:00:00 2001 From: Blizzard Finnegan Date: Wed, 2 Feb 2022 22:44:54 -0500 Subject: [PATCH] Oh god what was this... --- day02/day2Part1 | Bin 36600 -> 18064 bytes day02/day2Part1.cpp | 2 + day15/day15Part1.cpp | 189 ++++++++++++++++++++++++++++++------------- 3 files changed, 135 insertions(+), 56 deletions(-) diff --git a/day02/day2Part1 b/day02/day2Part1 index 5b82bf9a8afd11635ae5f527297a15b88f37b2c5..6f5e7b7359a73a9ce27b5e834c0ee7af79a13601 100755 GIT binary patch literal 18064 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 diff --git a/day02/day2Part1.cpp b/day02/day2Part1.cpp index 63082dc..5c81596 100644 --- a/day02/day2Part1.cpp +++ b/day02/day2Part1.cpp @@ -1,5 +1,6 @@ #include #include +#include using namespace std; int main (void) @@ -28,6 +29,7 @@ int main (void) cout << "Error!!!"; } } + cout << std::filesystem::current_path() << endl; finalAnswer = totalVertical * totalForward; cout << finalAnswer; return 0; diff --git a/day15/day15Part1.cpp b/day15/day15Part1.cpp index 916875f..99e6a20 100644 --- a/day15/day15Part1.cpp +++ b/day15/day15Part1.cpp @@ -1,70 +1,147 @@ -// The A* implementation used in this code is -// a modified form of Dijkstra's Algorithm, as -// see on the YouTube channel "Friendly Developer" #include #include #include #include #include #include +#include -#define INF 10 +#define INFINITY 1000000; using namespace std; +const int arrayXsize = 10; // 10 for testing, 100 for final +const int arrayYsize = 10; // 10 for testing, 100 for final +int costMap[arrayYsize][arrayXsize]; + +class AStarSort { + public: + struct sNode + { + bool bVisited = false; // Has this node been visited? + int iDistRemain; // Distance remaining to goal + int iDistTaken; // Distance from start + int iNodeWeight; // Node wieght + int x; // X-coordinate of node + int y; // Y-coordinate of node + vector vecNeighbors; // Neighbors + sNode* parent; // Node we came through to get here + }; + + void mapImport() + { + // The Following code reads in the textfile of choice, and + // makes a 2D array of points with the cost values of each point + int xIndex = 0; + int yIndex = 0; + int tempInt = 0; + string rawInput; + ifstream readFile ("data/testInput.txt", ios::in); + + while(getline(readFile, rawInput)) + { + for(xIndex = 0; + xIndex < rawInput.size(); + xIndex++) + { + tempInt = rawInput[xIndex]-'0'; + costMap[yIndex][xIndex] = tempInt; + } + yIndex++; + } + + // End of file read + + return; + }; + + public: + void solveAStar() + { + // this creates all the nodes needed, and initializes them with + // a location, an unvisited state, no parent, and all neighbors + auto nodes = new sNode[arrayYsize * arrayXsize]; + for (int y = 0; y < arrayYsize; y++) + { + for (int x = 0; x < arrayXsize; x++) + { + nodes[x * arrayXsize + y].x=x; + nodes[x * arrayXsize + y].y=y; + nodes[x * arrayXsize + y].bVisited = false; + nodes[x * arrayXsize + y].iDistRemain = INFINITY; + nodes[x * arrayXsize + y].iDistTaken = INFINITY; + nodes[x * arrayXsize + y].iNodeWeight = costMap[y][x]; + nodes[x * arrayXsize + y].parent = nullptr; + if(y>0) + nodes[x * arrayXsize + y].vecNeighbors.push_back + ( + &nodes[(x + 0) * arrayXsize + (y - 1)] + ); + if(y< arrayYsize - 1) + nodes[x * arrayXsize + y].vecNeighbors.push_back + ( + &nodes[(x + 0) * arrayXsize + (y + 1)] + ); + if(x>0) + nodes[x * arrayXsize + y].vecNeighbors.push_back + ( + &nodes[(x - 1) * arrayXsize + (y - 0)] + ); + if(x< arrayYsize - 1) + nodes[x * arrayXsize + y].vecNeighbors.push_back + ( + &nodes[(x + 1) * arrayXsize + (y + 0)] + ); + } + } + + // This creates the starting and ending nodes, and initializes them + sNode *nodeStart = &nodes[0]; + sNode *nodeEnd = &nodes[ (arrayXsize * arrayYsize) - 1 ]; + + auto manhattanDist = [](sNode* a) + { + return ((arrayXsize - 1) - a->x) + ((arrayYsize - 1) - a->y); + }; + sNode *nodeCurrent = nodeStart; + nodeStart->iDistTaken = 0; + nodeStart->iDistRemain = manhattanDist(nodeStart); + list listNotTestedNodes; + listNotTestedNodes.push_back(nodeStart); + + while(!listNotTestedNodes.empty()) + { + // Sort by order of remaining distance to the goal + listNotTestedNodes.sort([](const sNode* lhs, const sNode* rhs) + { return lhs ->iDistRemain < rhs->iDistRemain; }); + + // Clear out visited nodes + while(!listNotTestedNodes.empty() && listNotTestedNodes.front()->bVisited) + listNotTestedNodes.pop_front(); + + // If list is empty, leave loop + if(listNotTestedNodes.empty()) break; + + // Visit the node at the front of the list + nodeCurrent = listNotTestedNodes.front(); + nodeCurrent->bVisited = true; + + //check each node's neighbors + for (auto nodeNeighbor : nodeCurrent->vecNeighbors) + { + if (!nodeNeighbor->bVisited) + listNotTestedNodes.push_back(nodeNeighbor); + } + } + + return; + }; +}; + int main(void) { - int arrayXsize, arrayYsize; - bool finalCode = false; - if (!finalCode) - { - arrayXsize = 10; - arrayYsize = 10; - } - if (finalCode) - { - arrayXsize = 100; - arrayYsize = 100; - } - int map[arrayYsize][arrayXsize]; - int distMap[arrayYsize][arrayXsize] = {INF}; - int remainingMap[arrayYsize][arrayXsize]; - for (int i = 0; i < arrayYsize; i++) - { - for (int j = 0; j < arrayXsize; j++) - { - //shrink xSize and ySize properly, using manhattan dist. - remainingMap[i][j] = ((arrayXsize - 1) - j) + - ((arrayYsize - 1) - i); - } - } - vector> pathThruMap; - int lineLength = 0; - int pathCost = 0; - int xIndex = 0; - int yIndex = 0; - int tempInt = 0; - string rawInput; - ifstream readFile ("data/testInput.txt", ios::in); - - while(getline(readFile, rawInput)) - { - for(int xIndex = 0; - xIndex < rawInput.size(); - xIndex++) - { - tempInt = rawInput[xIndex]-'0'; - map[yIndex][xIndex] = tempInt; - } - yIndex++; - } - - // Pairs are basically coordinates - pair vectorAddPair; - // Pairs are initialized as (note namespace); - vectorAddPair = make_pair(0,0); - // add pair to vector - pathThruMap.push_back(vectorAddPair); - + AStarSort functionCall; + functionCall.mapImport(); + functionCall.solveAStar(); return 0; }