Algebraic solutions are fascinating. I was hooked on Sage for a week or two solving similar problems. I solved this one using brute force though:<p><pre><code> array<array<int, 6>, 6> tumblers
= {{{39, 90, 75, 88, 15, 57}, {9, 2, 58, 68, 48, 64},
{29, 55, 16, 67, 8, 91}, {40, 54, 66, 22, 32, 25},
{49, 1, 17, 41, 14, 30}, {44, 63, 10, 83, 46, 3}}};
template <typename It> bool
solve (It tumbler, It end, int const sum) {
if (tumbler == end)
return (sum == 0);
for (auto const pin: *tumbler) {
if (solve (next(tumbler), end, sum - pin)) {
std::cout << pin << std::endl;
return true;
}
}
return false;
}
int main() {
solve (tumblers.rbegin(), tumblers.rend(), 419);
}</code></pre>