//Fun/AdventCalendar2020/Day5-1.cpp //Matthew Ellison // Created: 12-05-20 //Modified: 12-05-20 //Find the highest sead ID on a boarding pass #include #include #include #include #include "Stopwatch.hpp" #include "Algorithms.hpp" struct boardingPass{ std::string passString; int rowNumber; int columnNumber; int seatId; void setPassString(std::string newPass){ int minRow = 0; int maxRow = 127; //Set the whole string passString = newPass; //Determine the row the seat is in for(int cnt = 0;cnt < 7;++cnt){ char half = newPass[cnt]; //Keep the smaller half if(half == 'F'){ maxRow = (minRow + maxRow) / 2; } //Keep the larger half else if(half == 'B'){ minRow = ((minRow + maxRow) / 2) + 1; } else{ std::cout << "ERROR! half must == F or B" << std::endl; exit(1); } } if(newPass[6] == 'F'){ rowNumber = maxRow; } else{ rowNumber = minRow; } int minSeat = 0; int maxSeat = 7; //Determine the column the seat is in for(int cnt = 7;cnt < 10;++cnt){ char half = newPass[cnt]; if(half == 'L'){ maxSeat = (minSeat + maxSeat) / 2; } else if(half == 'R'){ minSeat = ((minSeat + maxSeat) / 2) + 1; } else{ std::cout << "ERROR! half must == R or L" << std::endl; exit(1); } } if(newPass[9] == 'L'){ columnNumber = maxSeat; } else{ columnNumber = minSeat; } //Determine the seatId seatId = (rowNumber * 8) + columnNumber; } }; std::vector importData(){ std::vector boardingPasses; std::ifstream inputFile("inputs/Day5.txt"); //Open the input file //Go through every element in the file and set it in the vector int cnt = 1; while(!inputFile.eof()){ boardingPass pass; std::string currentPass; inputFile >> currentPass; if(!currentPass.empty()){ pass.setPassString(currentPass); } ++cnt; boardingPasses.push_back(pass); } return boardingPasses; } int main(){ mee::Stopwatch timer; std::vector passes = importData(); boardingPass maxPass; //Start the timer timer.start(); //Find the largest seatId in the vector for(boardingPass currentPass : passes){ if(currentPass.seatId > maxPass.seatId){ maxPass = currentPass; } } //Stop the timer timer.stop(); //Print the results std::cout << "The highest seatId = " << maxPass.seatId <<"\nIt took " << timer.getStr() << " to finish this problem" << std::endl; return 0; } /* Results: The highest seatId = 813 It took 0.000 nanoseconds to finish this problem */