2011-09-01から1ヶ月間の記事一覧

problem 40

着陸したら全く終わらなかった。 main = print $ p p = map (d.(10^)) [0..6] d x = (g 190000)!!(x-1) g x = foldl f "" [1..x] where f x y = x++(show y)ちょっとカンニングして以下。 Prelude Data.Char> product [digitToInt $ ([0..] >>= show) !! x |…

problem39

まあ、そのまま。 sortByなりmaximumByなりがData.Ordのcomparingを使わないといけないのがrubyと比較して面倒 import Data.List import Data.Ord main = print $ p p = maximumBy (comparing length) $ group $ sort [x+y+z|x<-[1..998],y<-[x..998-x],z<-[…

problem38

パンデジタル数になるのは 少なくともn 連結される数はn=2のとき、最初が4桁と次が5桁になるので 4999 import Data.List main = print $ maximum $concat $ map g [9..9999] f::Int->Int->Int f x y = read $foldl (++) [] $map show $zipWith (*) [x,x..] […

problem37

primesとtailsを使ったので楽にできた。 Prelude Data.List Data.Numbers.Primes> let f x= all (isPrime.read) $ filter (/=[]) $ tails (show x) ++ (map reverse (tails (reverse (show x)))) in sum $ take 11 [x|x<-primes,x>10,f x] 748317 it :: Inte…

probelm36

基数変換がダサい。 Prelude> let d2b x = if (div x 2)/=0 then (d2b (div x 2))++[mod x 2] else [mod x 2] in sum [x|x<-[1..1000000],show x==reverse (show x),d2b x==reverse (d2b x)] 872187 it :: Integer (1.20 secs, 877606456 bytes)

problem35

ローテート関数が見つからなかったので自作 Prelude Data.Numbers.Primes> let g (x,y) = y++x ;f::Int->[Int];f x = map (read.g.(`splitAt` (show x))) [1..((length.show) x)-1] in length [x|x<-[1..1000000],isPrime x,all isPrime $ f x] 55 it :: Int…

problem34

なぜ5桁以内かを言えていない。 Prelude List> let f x=foldr (*) 1 [1..x]; g x=x==(sum $ map (f.read.(:[])) $show x) in sum [x|x<-[3..100000],g x] 40730 it :: Integer (5.22 secs, 3383707256 bytes)

problem 33

いまいち美しくない。 Prelude List> let f a b c d = ((a==c && (a*10+b)/(c*10+d)==b/d)||(a==d&&(a*10+b)/(c*10+d)==b/c)||(b==c&&(a*10+b)/(c*10+d)==a/d)||(b==d&&(a*10+b)/(c*10+d)==a/c))&&(b/=0&&d/=0)&&(a/=c&&b/=d) in map product $ transpose [[…