// Written by Katsumi // Compile with: g++ -std=c++20 -Wall -Wextra -pedantic NumberReversal.cpp -o NumberReversal #include #include #include #include #include #include #include #include template bool Sorted(std::vector list) { return std::adjacent_find(list.begin(), list.end(), std::greater()) == list.end(); } template std::string VectorRepr(std::vector list) { auto Separate = [](std::string a, int b) { return std::move(a) + ", " + std::to_string(b); }; return std::accumulate(std::next(list.begin()), list.end(), std::to_string(list[0]), Separate); } int main() { const std::string IntroText = "NUMBER REVERSAL GAME\n" "based on a \"task\" on Rosetta Code -- rosettacode.org\n" "by Katsumi \n\n"; // Don't ever write this s**tty code... // std::srand(std::time(0)); // Do this instead: std::random_device Device; std::mt19937_64 Generator(Device()); std::vector List = {1, 2, 3, 4, 5, 6, 7, 8, 9}; std::shuffle(List.begin(), List.end(), Generator); std::cout << IntroText; int Moves, PlayerInput; while (!Sorted(List)) { std::cout << "Current list: [" << VectorRepr(List) << "]\n" "Digits to reverse? (2-9) "; while (true) { std::cin >> PlayerInput; if (PlayerInput < 2 || PlayerInput > 9) std::cout << "Please enter a value between 2 and 9.\n" "Digits to reverse? (2-9) "; else break; } std::reverse(List.begin(), List.begin()+PlayerInput); ++Moves; } std::cout << "Yay! You sorted the list! You've made " << Moves << " moves.\n"; return 0; }