Description for today’s challenge is here.
Once you understood what this challenge is really asking the solution becomes really simple:
If you read the question carefully, what it’s really saying is:
For every house number N, only elves whose number M that is a divisor of N will visit this house and deliver M * 10 gifts. Find the smallest N where Sum(M * 10) >= 29000000.
So our first task is to find all divisors for any given number N, and since each divisor has a opposite (as in, for a divisor M, N/M is also a divisor) so you only need to iterate up to Sqrt(N).
And since my input is such a high number, we can safely start from a relatively high number for N too (100K in this case) and use Seq.unfold to generate an infinite sequence of numbers.
Part 2 adds a small twist to proceedings – only divisors M that are <= N/50 will be considered, and the multiplier is now 11 instead of 10.
Notice that since we’re not looking for ‘all’ divisors anymore, so I also took the liberty to rename the function to findDivisors so it more accurately describes what it does now.