Prototype returns an owned stable copy of nonnegative values; preserve input. Final removes negative values in place, preserving retained order and duplicates, and returns the number removed. Use O(n) time, O(1) auxiliary state, no replacement allocation, and retain original vector capacity. All/none/empty removal are valid. Existing observers to erased/moved logical elements have no preservation guarantee; data allocation itself remains unchanged when original capacity is nonzero. Do not shrink_to_fit.
C++ contract conventions: numeric values use signed Int (long long); all inputs and intermediate arithmetic are within its representable range. Opt<T> means std::optional<T> and absence is std::nullopt; Vec<T> means std::vector<T>. Invalid documented arguments throw std::invalid_argument. Inputs passed by const reference remain caller owned. Returned containers and records own their contents. No runtime type coercion is required; C++ static types exclude many dynamic-language type errors. Unless a lesson states otherwise, string ordering is lexicographic over Unicode code points (Text) or UTF-8 identifiers (std::string).
inline Vec<Int> prototype(const Vec<Int>& values);
inline Int solve(Vec<Int>& values);Compile and run from this directory:
c++ -std=c++20 -O2 -Wall -Wextra -pedantic -pthread main.cpp -o practice
./practice --stage prototype
./practice --stage finalEdit exercise.hpp. Both stages start unfinished and must report failures until implemented. Keep main.cpp as the executable contract. The runner returns nonzero for a failed check, an unexpected exception, an invalid stage, or an empty suite. C++20 and only the standard library are required.
Complete the starter code, then run the checks.
Results and errors will appear here.
C++ runtime powered by Wasmer.