#include "../include/color.h" #include "../include/useful_funcs.h" #include #include #include #include #include #include #include // this is defenitely my code void generatePermutation(const std::vector &chars, std::vector current, int length, std::vector> &results) { // Base case: if the current vector reaches the desired length if (current.size() == length) { results.push_back(current); // Store the current vector return; } // Recursive case: add each character and recurse for (char c : chars) { current.push_back(c); // Append character generatePermutation(chars, current, length, results); // Recurse current.pop_back(); // Backtrack to explore other combinations } } std::vector> generateAllPermutations(const std::vector &chars, int length) { std::vector> results; // To store all generated vectors generatePermutation(chars, {}, length, results); // Start the recursion with an empty vector return results; // Return all generated vectors } // end of defenitely my code int main() { std::ifstream inputfile("input"); std::string input; unsigned long long res = 0; if (!inputfile.is_open()) { std::cerr << "Could not open the file" << std::endl; return ENOENT; } std::string line; std::vector lineSplited; std::vector lineSplitedInt; std::vector> AllPossiblePermutations; std::vector PossibleResults; const std::vector operators = {'+', '*'}; unsigned long long EqRes; unsigned long long TmpRes; while (std::getline(inputfile, line)) { lineSplited.clear(); lineSplitedInt.clear(); AllPossiblePermutations.clear(); PossibleResults.clear(); lineSplited = splitString(line); sscanf(lineSplited[0].c_str(), "%llu:", &EqRes); lineSplited.erase(lineSplited.begin()); ConvertStringVectorToIntVector(lineSplited, lineSplitedInt); AllPossiblePermutations = generateAllPermutations(operators, lineSplitedInt.size() - 1); for (std::vector &permutation : AllPossiblePermutations) { TmpRes = lineSplitedInt[0]; // cicle from one since TmpRes is set to the first number for (int i = 1; i < lineSplitedInt.size(); i++) { TmpRes = condop_ull(TmpRes, static_cast(lineSplitedInt[i]), permutation[i - 1]); } PossibleResults.push_back(TmpRes); } for (unsigned long long &result : PossibleResults) { if (result == EqRes) { res += EqRes; break; } } } // I added colors, because I can std::cout << CYAN "Sum of valid equasions is: " << YELLOW << res << RESET "\n"; }