It’s been a while since I’ve done one of these, so I was afraid of being rusty but it worked out alright. I used the generator I made a while back to create the primes (pre-filled to the example given in the project) and used procs to take care of the truncation.
BAM!
The number 3797 has an interesting property. Being prime itself, it is possible to continuously remove digits from left to right, and remain prime at each stage: 3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3.
Find the sum of the only eleven primes that are both truncatable from left to right and right to left.
load 'prime_generator.rb' def prime? n, truncate return false if !$primer.is_prime?(n) return true if n < 10 prime? truncate.call(n), truncate end left = Proc.new { |n| n / 10 } right = Proc.new { |n| n % 10**Math.log10(n).to_i } $primer = Prime_Generator.new 3_797 n, sum, found = 0, 0, 0 while found < 11 do if (n += 1) > 10 && prime?(n, left) && prime?(n, right) found += 1 sum += n end end puts sum
Also, I’ve finally moved my project euler solutions over to bitbucket. Long live Mercurial!