in misc/osquery_game/challenge.cpp [229:299]
std::set<size_t> getDstPositions(const ConstraintList& dst) {
std::set<size_t> all;
auto equals = dst.getAll(EQUALS);
for (const auto e : equals) {
auto op = tryTo<size_t>(e);
if (op) {
all.insert(op.take());
}
}
size_t max_gte = 0;
auto gt = dst.getAll(GREATER_THAN);
auto gte = dst.getAll(GREATER_THAN_OR_EQUALS);
if (gt.size() > 0 || gte.size() > 0) {
for (auto e : gt) {
auto op = tryTo<size_t>(e);
if (op && op.take()+1 > max_gte) {
max_gte = op.take()+1;
}
}
for (auto e : gte) {
auto op = tryTo<size_t>(e);
if (op && op.take() > max_gte) {
max_gte = op.take();
}
}
}
{
std::stringstream stream;
stream << std::hex << max_gte;
}
size_t min_lte = 0;
auto lt = dst.getAll(LESS_THAN);
auto lte = dst.getAll(LESS_THAN_OR_EQUALS);
if (lt.size() > 0 || lte.size() > 0) {
for (auto e : lt) {
auto op = tryTo<size_t>(e);
if (op && op.take()-1 > min_lte) {
min_lte = op.take()-1;
}
}
for (auto e : lte) {
auto op = tryTo<size_t>(e);
if (op && op.take() > min_lte) {
min_lte = op.take();
}
}
}
{
std::stringstream stream;
stream << std::hex << min_lte;
}
if (min_lte > 0) {
for (auto i = max_gte; i <= min_lte; i++) {
all.insert(i);
}
} else if (gt.size() > 0 || gte.size() > 0) {
for (auto i = max_gte; i <= 255; i++) {
all.insert(i);
}
}
return all;
}