Prototype: return a const observer pointer to the first value equal to needle, or nullptr. Final: return an optional borrowed span covering the first exact contiguous needle in values. Empty needle returns an engaged empty span at the input start, including empty input. No match returns nullopt. Preserve input and allocate no replacement sequence. The caller must keep input storage alive and stable for the returned observer/view lifetime.
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 const Int* prototype(std::span<const Int> values,Int needle);
inline Opt<std::span<const Int>> solve(std::span<const Int> values,std::span<const Int> needle);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.