In this post, I will introduce problems related to bit manipulation. Before that, you may want to learn the
std::bitset<> class template.
The problem is not difficult. But it is tricky to write a clean code. The hint is that all valid patterns can be presented by the predefined bit-sets.
auto const p1 = bitset<10>(0b011'1100'000); auto const p2 = bitset<10>(0b000'1111'000); auto const p3 = bitset<10>(0b000'0011'110);
Bitsets support fast intersect and union of unordered sets.
// intersect a & b // union a | b // check if a is in b (a & b) == a