Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 8

As always, any feedback is welcome.

# Euler 8
# http://projecteuler.net/index.php?section=problems&id=8
# Find the greatest product of five consecutive digits
# in the following 1000-digit number
import time
start = time.time()

number = '\
73167176531330624919225119674426574742355349194934\
96983520312774506326239578318016984801869478851843\
85861560789112949495459501737958331952853208805511\
12540698747158523863050715693290963295227443043557\
66896648950445244523161731856403098711121722383113\
62229893423380308135336276614282806444486645238749\
30358907296290491560440772390713810515859307960866\
70172427121883998797908792274921901699720888093776\
65727333001053367881220235421809751254540594752243\
52584907711670556013604839586446706324415722155397\
53697817977846174064955149290862569321978468622482\
83972241375657056057490261407972968652414535100474\
82166370484403199890008895243450658541227588666881\
16427171479924442928230863465674813919123162824586\
17866458359124566529476545682848912883142607690042\
24219022671055626321111109370544217506941658960408\
07198403850962455444362981230987879927244284909188\
84580156166097919133875499200524063689912560717606\
05886116467109405077541002256983155200055935729725\
71636269561882670428252483600823257530420752963450'

max = 0
for i in xrange(0, len(number) - 5):
    nums = [int(x) for x in number[i:i+5]]
    val = reduce(lambda agg, x: agg*x, nums)
    if val > max: max = val

print max

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 7

As always, any feedback is welcome.

# Euler 7
# http://projecteuler.net/index.php?section=problems&id=7
# By listing the first six prime numbers: 2, 3, 5, 7,
# 11, and 13, we can see that the 6th prime is 13. What
# is the 10001st prime number?
import time
start = time.time()

def nthPrime(nth):
    primes = [2]
    number = 3          

    while len(primes) < nth:
        isPrime = True
        for prime in primes:
            if number % prime == 0:
                isPrime = False
                break
            if (prime * prime > number):
                break
        if isPrime:
            primes.append(number)
        number += 2                 

    return primes[nth - 1]

print nthPrime(10001)
print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 6

As always, any feedback is welcome.

# Euler 6
# http://projecteuler.net/index.php?section=problems&id=6
# Find the difference between the sum of the squares of
# the first one hundred natural numbers and the square
# of the sum.
import time
start = time.time()

square_of_sums = sum(range(1,101)) ** 2
sum_of_squares = reduce(lambda agg, i: agg+i**2, range(1,101))
print square_of_sums - sum_of_squares

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 5

As always, any feedback is welcome.

# Euler 5
# http://projecteuler.net/index.php?section=problems&id=5
# 2520 is the smallest number that can be divided by each
# of the numbers from 1 to 10 without any remainder.
# What is the smallest positive number that is evenly
# divisible by all of the numbers from 1 to 20?
import time
start = time.time()

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def lcm(a, b):
    return a * b // gcd(a, b)

print reduce(lcm, range(1, 20))

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 4

As always, any feedback is welcome.

# Euler 4
# http://projecteuler.net/index.php?section=problems&id=4
# Find the largest palindrome made from the product of
# two 3-digit numbers. A palindromic number reads the
# same both ways. The largest palindrome made from the
# product of two 2-digit numbers is 9009 = 91 x 99.
# Find the largest palindrome made from the product of
# two 3-digit numbers.
import time
start = time.time()

def isPalindrome(s):
    return s == s[::-1]

max = 0
for i in xrange(100, 999):
    for j in xrange(i, 999):
        n = i * j;
        if (isPalindrome(str(n))):
            if (n > max): max = n

print max

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 3

As always, any feedback is welcome.

# Euler 3
# http://projecteuler.net/index.php?section=problems&id=3
# The prime factors of 13195 are 5, 7, 13 and 29.
# What is the largest prime factor of the number
# 600851475143?
import time
start = time.time()

def largest_prime_factor(n):
  max = n
  divisor = 2

  while (n >= divisor ** 2):
    if n % divisor == 0:
        max, n = n, n / divisor
    else:
        divisor += 1      

  return max

print largest_prime_factor(600851475143)

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 2

As always, any feedback is welcome.

# Euler 2
# http://projecteuler.net/index.php?section=problems&id=2
# Find the sum of all the even-valued terms in the
# Fibonacci sequence which do not exceed four million.
# Each new term in the Fibonacci sequence is generated
# by adding the previous two terms. By starting with 1
# and 2, the first 10 terms will be:
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
# Find the sum of all the even-valued terms in the
# sequence which do not exceed four million.
import time
start = time.time()

total = 0
previous = 0
i = 1

while i <= 4000000:
    if i % 2 == 0: total +=i

    # variable swapping removes the need for a temp variable
    i, previous = previous, previous + i

print total 

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')
Ben Griswold on September 12th, 2010

In my attempt to learn (Iron)Python out in the open, here’s my solution for Project Euler Problem 1

As always, any feedback is welcome.

# Euler 1
# http://projecteuler.net/index.php?section=problems&amp;id=1
# If we list all the natural numbers below 10 that are
# multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of
# these multiples is 23. Find the sum of all the multiples
# of 3 or 5 below 1000.
import time
start = time.time()

print sum([x for x in range(1000) if x % 3== 0 or x % 5== 0]) 

print "Elapsed Time:", (time.time() - start) * 1000, "millisecs"
a=raw_input('Press return to continue')

# Also cool
def constraint(x):
    return x % 3 == 0 or x % 5 == 0

print sum(filter(constraint, range(1000)))