Is this status change allowed
Orders move through a fixed lifecycle, and a support tool needs to know whether a requested change is one the system permits.
- The only moves allowed are: placed to paid, placed to cancelled, paid to packed, paid to refunded, packed to shipped, shipped to delivered.
- Everything else is refused, including staying where you are.
- Unknown status names are refused.
canTransition(current: string, target: string) → bool
C++ needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.
Where you start
bool canTransition(std::string current, std::string target) {
}
Worked examples
| Call | Result |
|---|---|
canTransition(std::string("placed"), std::string("paid")) | true |
canTransition(std::string("paid"), std::string("refunded")) | true |
canTransition(std::string("shipped"), std::string("delivered")) | true |
canTransition(std::string("placed"), std::string("shipped")) | false |
Hint
A set of allowed pairs is easier to get right than a nest of ifs.
Reference solution in C++
bool canTransition(std::string current, std::string target) {
std::set<string> allowed{"placed>paid", "placed>cancelled", "paid>packed", "paid>refunded", "packed>shipped", "shipped>delivered"};
return allowed.count(current + ">" + target) > 0;
}