from lib_misc import factorial


def is_curious(n):
    s = sum([factorial(int(d)) for d in str(n)])
    return n == s


def is_curious_faster(n):
    """ Potentially faster solution. """
    s = 0
    for d in str(n):
        s += factorial(int(d))
        if s > n:
            return False
    return n == s


def euler_034():
    return sum([n for n in range(3, 10**5) if is_curious(n)])


if __name__ == "__main__":
    assert(is_curious(145))
    print("e034.py: {}".format(euler_034()))
    assert(euler_034() == 40730)
