Billboard Challenge, Part 1
June 22, 2012
Several years ago, a billboard with this text appeared in the tech centers of Silicon Valley and Route 128:
{ first 10-digit prime found in consecutive digits of e }.com
Your task is to write a program that finds the first 10-digit prime found in consecutive digits of e. When you are finished, you are welcome to read or run a suggested solution, or to post your own solution or discuss the exercise in the comments below.
[…] today’s Programming Praxis exercise, our goal is to solve the problem posed to potential employees by a […]
My Haskell solution (see http://bonsaicode.wordpress.com/2012/06/22/programming-praxis-billboard-challenge-part-1/ for a version with comments):
import Data.List stream :: Integral a => (a, a) -> (a, a, a) -> [(a, a, a)] -> [a] stream (lo, hi) z ~(x:xs) = if lbound == approx z hi then lbound : stream (lo, hi) (mul (10, -10*lbound, 1) z) (x:xs) else stream (lo, hi) (mul z x) xs where lbound = approx z lo approx (a,b,c) n = div (a*n + b) c mul (a,b,c) (d,e,f) = (a*d, a*e + b*f, c*f) streamDigits :: (Num a, Integral a, Enum a) => (a -> (a, a, a)) -> (a, a) -> [a] streamDigits f range = stream range (1,0,1) [(n, a*d, d) | (n,d,a) <- map f [1..]] stream_e :: [Integer] stream_e = streamDigits (\k -> (1, k, 1)) (1, 2) primes :: [Integer] primes = 2 : filter prime [3,5..] prime :: Integer -> Bool prime n = all ((> 0) . mod n) $ takeWhile (\p -> p * p <= n) primes main :: IO () main = print $ find prime . map (foldl1 ((+) . (10 *)) . take 10) $ tails stream_ePython solution
At first I didn’t check to make sure ‘number’ had 10 digits, and it found a ‘0’ followed by a 9-digit prime.
e_digits() and is_prime() come from previous exercises
from digits_of_e import e_digits from isprime import is_prime from itertools import islice digit = e_digits() number = reduce(lambda t,d: 10*t + d, islice(digit, 10)) while number < 1000000000 or not is_prime(number): number = number%1000000000*10 + next(digit) else: print number[…] recent Programming Praxis problem resurrected the famous Google billboard puzzle. Back in July of 2004, Google put up billboards all over the country […]
I’m falling in love with Python. This takes a while to run because it doesn’t evaluate lazily, but that’s a consequence of my structure phobia.