project-euler/src/Julia/Problem037.jl

54 lines
1.3 KiB
Julia

#=
Created on 07 Sep 2021
@author: David Doblas Jiménez
@email: daviddoji@pm.me
Solution for Problem 37 of Project Euler
https://projecteuler.net/problem=37
=#
using BenchmarkTools
using Primes
function is_truncatable_prime(number)
num_str_rev = reverse(digits(number))
for (idx,num) in enumerate(join(num_str_rev))
if !isprime(parse(Int, join(num_str_rev[idx:end]))) ||
!isprime(parse(Int, join(num_str_rev[1:end-idx+1])))
return false
end
end
return true
end
function Problem37()
"""
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.
NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes.
"""
ans = 0
# Statement of the problem says this
primes_list = primes(11, 1_000_000)
for num in primes_list
if is_truncatable_prime(num)
ans += num
end
end
return ans
end
println("Time to evaluate Problem 37:")
@btime Problem37()
println("")
println("Result for Problem 37: ", Problem37())