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')
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')
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')
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')
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')
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')
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')
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&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)))