diff --git a/archive/c/c-plus-plus/sleep-sort.cpp b/archive/c/c-plus-plus/sleep-sort.cpp new file mode 100644 index 000000000..a3f120710 --- /dev/null +++ b/archive/c/c-plus-plus/sleep-sort.cpp @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include +#include + +std::mutex mtx; +std::vector sorted_numbers; + +void sortNumber(int number) { + std::this_thread::sleep_for(std::chrono::seconds(number)); + std::lock_guard lock(mtx); + sorted_numbers.push_back(number); +} + +std::vector parseInput(const std::string &input) { + std::vector numbers; + std::stringstream ss(input); + std::string token; + + while (std::getline(ss, token, ',')) { + try { + int num = std::stoi(token); + numbers.push_back(num); + } catch (...) { + throw std::invalid_argument("Invalid input"); + } + } + + return numbers; +} + +int main(int argc, char* argv[]) { + if (argc != 2) { + std::cerr << "Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"; + return 1; + } + + std::string input = argv[1]; + if (input.empty() || input[0] == ' ') { + std::cerr << "Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"; + return 1; + } + + std::vector numbers; + try { + numbers = parseInput(input); + } catch (...) { + std::cerr << "Usage: please provide a valid list of integers in the format \"1, 2, 3, 4, 5\"\n"; + return 1; + } + + if (numbers.size() < 2) { + std::cerr << "Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"; + return 1; + } + + std::vector threads; + for (int num : numbers) { + threads.emplace_back(sortNumber, num); + } + + for (auto &t : threads) { + t.join(); + } + + for (size_t i = 0; i < sorted_numbers.size(); ++i) { + std::cout << sorted_numbers[i]; + if (i < sorted_numbers.size() - 1) std::cout << ", "; + } + std::cout << std::endl; + + return 0; +} diff --git a/archive/c/c-plus-plus/testinfo.yml b/archive/c/c-plus-plus/testinfo.yml index d27c8d979..700386b07 100644 --- a/archive/c/c-plus-plus/testinfo.yml +++ b/archive/c/c-plus-plus/testinfo.yml @@ -4,6 +4,6 @@ folder: container: image: "gcc" - tag: "8.3" - build: "g++ -o {{ source.name }} {{ source.name }}{{ source.extension }}" + tag: "8.3" + build: "g++ -std=c++17 -pthread -o {{ source.name }} {{ source.name }}{{ source.extension }}" cmd: "./{{ source.name }}"