Solution to Problem 92. Written in Python.

Problem: A number chain is created by continuously adding the square of the digits in a number to form a new number until it has been seen before.

For example,

44 → 32 → 13 → 10 → 1 → 1
85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89

Therefore any chain that arrives at 1 or 89 will become stuck in an endless loop. What is most amazing is that EVERY starting number will eventually arrive at 1 or 89.

How many starting numbers below ten million will arrive at 89?

def sum_of_digit_squares(num):
    return sum(map(lambda x: int(x) ** 2, str(num)))

answers = []
for num in range(2, 10000001):
    next_number = sum_of_digit_squares(num)

    while next_number != 89 and next_number != 1:
        next_number = sum_of_digit_squares(next_number)

    if next_number == 89:
        answers.append(num)

print len(answers)