in misc/osquery_game/challenge.cpp [331:362]
bool tryValidMove(size_t src, size_t dst) {
static bool kPigOrSheepMoved = false;
bool srcOK = false;
if (getX(dst) > 16 || getY(dst) > 16) {
return false;
}
size_t i = 0, index = 0;
for (const auto c : kCells) {
if (c.p == invertPos(dst)) {
return false;
break;
} else if (c.p == invertPos(src)) {
if (c.i == PIG || c.i == SHEEP || c.i == TRACTOR || c.i == SUNFLOWER) {
index = i;
srcOK = true;
}
}
i++;
}
if (srcOK) {
if ((kCells[index].i == PIG || kCells[index].i == SHEEP) && !kPigOrSheepMoved) {
kCells.push_back({BUCKET, kCells[index].p});
kPigOrSheepMoved = true;
}
kCells[index].p = invertPos(dst);
}
return srcOK;
}