37問目
3797→797→97→7、3797→379→37→3というように左右どちらから切り落としていっても全て素数となるような素数のうち、最初の11個を足し合わせる。
import Data.List main = print $ sum $ euler037 euler037 :: [Int] euler037 = take 11 $ filter truncatable $ dropWhile (< 10) primes truncatable :: Int -> Bool truncatable n = all (isPrime . read) (initsAndTails $ show n) where initsAndTails xs = filter (/= xs) $ filter (/= "") $ (inits xs ++ tails xs) primes :: [Int] primes = 2 : filter isPrime [3..] isPrime :: Int -> Bool isPrime 1 = False isPrime x = all ((/= 0) . mod x) $ takeWhile (<= (floor $ sqrt $ fromIntegral x)) primes