Let's say I want to find all sets of 5 single-digit, non-repeating numbers that add up to 30... I'd end up with [9,8,7,5,1], [9,8,7,4,2], [9,8,6,4,3], [9,8,6,5,2], [9,7,6,5,3], and [8,7,6,5,4]. Each of those sets contains 5 non-repeating digits that add up to 30, the given sum.
Any help would be greatly appreciated. Even just a starting point for me to use would be awesome.
I came up with one method, which seems like a long way of going about it: get all unique 5-digit numbers (12345, 12346, 12347, etc.), add up the digits, and see if it equals the given sum (e.g. 30). If it does, add it to the list of possible matching sets.
I'm doing this for a personal project, which will help me in solving Kakuro puzzles without actually solving the whole thing at once. Yeah, it may be cheating, but it's... it's not THAT bad... :P
A naive approach would be to increment a variable from 12345
till 98765
and to select it only if it has unique digits and sum of digits is 30
:
for($i=12345;$i<98765;$i++) {
$arr = preg_split('//',strval($i));
if(count(array_unique($arr)) == count($arr) && array_sum($arr) == 30)
echo $i."\n";
}
Working example
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With