// // Created by caleb on 3/6/24. // #include #include #include #include #include #include #include #include using namespace std::literals::string_literals; // import std::string literals #include "binarySearch.h" #include "colormap.h" class OutOfBoundsException: public std::exception { virtual const char* what() const throw() { return "Method attempted to call a vector location that was larger than the vector itself."; } } OutOfBoundsException; int getTotal(std::vector arr) { int sum = 0; for (int i = 0; i < arr.size(); ++i) { sum += arr[i]; } return sum; } int getTotal(std::vector> arr) { int sum = 0; for (int i = 0; i < arr.size(); ++i) { sum += getTotal(arr[i]); } return sum; } int getAverage(std::vector arr) { return getTotal(arr) / arr.size(); // NOLINT(*-narrowing-conversions) } int getAverage(std::vector> arr) { return getTotal(arr) / arr.size(); } int getRowTotal(std::vector> arr, int desiredRow) { // validate if (desiredRow > arr[desiredRow].size()) { throw OutOfBoundsException; } int sum = 0; for (int i = 0; i < arr[desiredRow].size(); ++i) { sum += arr[desiredRow][i]; } return sum; } int getColumnTotal(std::vector> arr, int desiredColumn) { // validate if (desiredColumn > arr.size()) { throw OutOfBoundsException; } int sum = 0; for (int i = 0; i < arr.size(); ++i) { sum += arr[i][desiredColumn]; } return sum; } int getHighestInRow(std::vector> arr, int desiredRow) { // validate if (desiredRow > arr[desiredRow].size()) { throw OutOfBoundsException; } int highest = INT_MIN; for (int i = 0; i < arr[desiredRow].size(); ++i) { if (arr[desiredRow][i] > highest) { highest = arr[desiredRow][i]; } } return highest; } int getLowestInRow(std::vector> arr, int desiredRow) { // validate if (desiredRow > arr[desiredRow].size()) { throw OutOfBoundsException; } int lowest = INT_MAX; for (int i = 0; i < arr[desiredRow].size(); ++i) { if (arr[desiredRow][i] < lowest) { lowest = arr[desiredRow][i]; } } return lowest; } int getHighestInColumn(std::vector> arr, int desiredColumn) { // validate if (desiredColumn > arr.size()) { throw OutOfBoundsException; } int highest = INT_MIN; for (int i = 0; i < arr.size(); ++i) { if (arr[i][desiredColumn] > highest) { highest = arr[i][desiredColumn]; } } return highest; } int getLowestInColumn(std::vector> arr, int desiredColumn) { // validate if (desiredColumn > arr.size()) { throw OutOfBoundsException; } int lowest = INT_MAX; for (int i = 0; i < arr.size(); ++i) { if (arr[i][desiredColumn] < lowest) { lowest = arr[i][desiredColumn]; } } return lowest; } std::vector getRowMap(std::vector> locationVector, int row) { std::vector rowMap; for (const auto& tuple : locationVector) { int tupleRow = std::get<0>(tuple); // Get the first element of the tuple int tupleValue = std::get<1>(tuple); // Get the second element of the tuple if (tupleRow == row) { rowMap.push_back(tupleValue); // Add the tuple value to the rowMap } } return rowMap; } std::string printVector(std::vector arr, std::vector locationVector = {-1}) { std::string output = "{"; std::map columnMap; for (int i = 0; i < arr.size(); ++i) { // check if iteration value matches one of the locationVector values. If it does, append an ASCII color sequence. int binSearchResult = binarySearch(locationVector, i); //printf("bin search result:%i", binSearchResult); if (binSearchResult > -1) { output.append(colorIterator()); } output.append(std::to_string(arr[i])); if ((arr.size() - 1) > i) { output.append(", "); } if (binSearchResult > -1) { output.append(COLOR_WHITE.c_str()); } } output.append("}"); return output; } std::string printVector(std::vector> arr, std::vector> locationVector = {{-1, -1}}) { std::string output = "{\n"; std::tuple highlightTuple; for (int i = 0; i < arr.size(); ++i) { std::vector rowVector = getRowMap(locationVector, i); output.append(printVector(arr[i], rowVector)); // print ",\n" if at the end of the loop if ((arr.size() - 1) > i) { output.append(",\n"); } } output.append("\n}"); return output; } std::vector> random2DArray(int x, int y) { std::vector> array(x, std::vector(y, 0)); // setup random number generation srand((unsigned) time(NULL)); for (int i = 0; i < x; ++i) { for (int j = 0; j < y; ++j) { array[i][j] = rand() / 1000; } } return array; } std::vector> highlightEveryOther(int x, int y) { std::vector> returnVector; for (int i = 0; i < x; ++i) { for (int j = 0; j < y; ++j) { if ((j + i) % 2 == 0) { //printf("(%i, %i), ", i, j); returnVector.push_back({i, j}); } } } printf("\n"); return returnVector; }