def solve(): return xiter (xrange(len(numstr) - 4)) \ .map (lambda start: numstr[start:start + 5]) \ .map (lambda substring: xiter(int(n) for n in substring)) \ .map (lambda numbers: numbers.product()) \ .max()
def solve(): return xiter(xrange(1, 1000)) \ .filter (lambda n: divides(3, n) or divides(5, n)) \ .sum()
def solve(): ntuple = xiter(triplets()) \ .filter(lambda (x, y, z): x**2 + y**2 == z**2) \ .next() return reduce(lambda x, y: x * y, ntuple)
def solve(): return xiter(products()) \ .filter(is_palindrome) \ .max()
def fibonacci(): return xiter(_fibonacci())
def naturals(start = 1): return xiter(_naturals(start))
def without(it, *values): return xiter(x for x in it if x not in values)
def factors(*args, **kwargs): return xiter(_factors(*args, **kwargs))
def primes(): return xiter(_primes())