2010-10-01から1ヶ月間の記事一覧

project euler problem 31

ブルートフォースで6分 main = print $ take 10 [(a,b,c,d,e,f,g,h)|a<-[0..200],b<-[0..100],c<-[0..40],d<-[0..20],e<-[0..10],\ f<-[0..4],g<-[0..2],h<-[0..1],a+b*2+c*5+d*10+e*20+f*50+g*100+h*200==200]あとは 2ペンス硬貨を両替していく方法が思い…

project euler problem 30

問題どおりだと以下のとおり Prelude Data.List> let f x= g $ show x ; g []=0;g (x:xs)=((read [x])::Int)^4+ g xs in [x|x<-[2..9999],f x==x] [1634,8208,9474] (0.30 secs, 132602804 bytes)どうも色々実験すると6桁以内なので main=print $ sum $ filt…

project euler problem 29

たぶん組み合わせの出力とsort|uniqの問題だろう import Data.List main = print $ length $ map head $ group $ sort $ map (uncurry (^)) [(a,b)|a<-[2..100],b<-[\ 2..100]]あんまりなのでポイントフリー化してみたが余り意味が無かった。 import Data.Li…

project euler problem 27

なんどやってもおかしいと思ったのは n^2+a*n+bの値がマイナスになっていてもisPrimeがTrueを出すときがあったせいだ。 import Data.Numbers.Primes import Data.Ord import Data.List main=print $ uncurry (*) $ maximumBy (comparing (length.plist)) ab …

haskell で 素数のライブラリを使う

http://hackage.haskell.org/packages/archive/primes/0.2.0.0/doc/html/Data-Numbers-Primes.htmlこれをつかう。 cabal install primes以上使い方 Prelude Data.Numbers.Primes> :m Data.Numbers.Primes Prelude Data.Numbers.Primes> sum $ takeWhile (<20…

project euler problem 28

73 74 75 76 77 78 79 80 81 72 43 44 45 46 47 48 49 50 71 42 21 22 23 24 25 26 51 70 41 20 7 8 9 10 27 52 69 40 19 6 1 2 11 28 53 68 39 18 5 4 3 12 29 54 67 38 17 16 15 14 13 30 55 66 37 36 35 34 33 32 31 56 65 64 63 62 61 60 59 58 57 増分…

project euler problem 26

フェルマーの小定理をみると mod a^(p-1) p == 1 (pは2,5以外の素数) aを10とすると 10^(p-1)は p-1桁のなかに循環少数が含まれている また、余りが1になったとき循環が終わることがわかるhttp://www.math.kindai.ac.jp/~chinen/junkan_f/junkan.htmlとい…

project euler problem 25

あっさり終わった。 項数を出すのに[1..]とzipしている点で遅くなるかと思ったがまったく問題なかった。 main = print $ head $ dropWhile ((

project euler problem 23

面倒だったので 力技で行ったら40分かかった。 どうやって高速化しようか… import Data.List main = print $ (sum [1..m]) - ( sum $ map head $ group $ sort [x+y|x<-abundantNumbers,y<-abundantNumbers\ ,x+y<=m]) abundantNumbers::[Int] abundantNumbe…

project euler problem 24

簡単だった。 import Data.List main = print $ (sort $ permutations [0..9]) !! (10^6-1)

project euler problem 22

まあ問題なし。 [1..]とzipをとる点がhaskellらしくて良い import Data.List import Data.Char main=print $ sum $ zipWith score [1..] $ sort names score x y = x * (sum $ map code y) code x = ord x - ord 'A' + 1 names=["MARY","PATRICIA","LINDA"..…

project euler problem 21

完全数を除外するのを忘れてた。 main = print $ sum [x|x<-[1..9999],isAmicable x] d n = [x|x<-[1..n-1],mod n x==0] isAmicable n = n/=m && m==sum (d n) && n==sum (d m) where m=sum (d n)

project euler problem 20

久しぶりに簡単な問題だった。 main = print $ sum $ map toIntg $ show $factorial 100 toIntg::Char->Integer toIntg x = read [x] factorial::Integer->Integer factorial 1 = 1 factorial n = n * factorial (n-1)まあ、以下の1行でもいいか。 |<Prelude> sum $ </prelude>…

project euler problem 19

1901年からというのに気がつかなかったorz main = print $ length $ filter is1Sun calendar is1Sun ([y,m,d],w) = if y>=1901&&d==1&&w=="Sun" then True else False calendar = zip [[y,m,d]|y<-[1900..2000],m<-[1..12],d<-[1..lastDay m y]] (cycle ["Mo…

project euler 18 67

最後の二行を 左を合わせてzipWith (+)したものと 右を合わせてzipWithしたものを比較し残りのものと置換して最後までやる上からたどる方法は配列でも使わないと無理、速度的にも無理だけど・・・ main = print $ g a67 g x | length x==1 = x | otherwise =…

project euler problem 17

組み合わせの問題なので内包表記が大活躍する。 concatMapの方が読みやすいかもしれない。 main = print $ length $ concat one2thousand one2nine = ["one","two","three","four","five","six","seven","eight","nine"] zero2nine = "":one2nine ten2ninete…

emacs + ghc-modにおいて TABを補完 Shift-TABをindent-cycleにする

GHCiはTabで補完するのにemacsがM-C-iでは耐えられない。 そこでtab -> 補完 shift+tab -> インデントとやってみるhaskell-mode は aptitudeで入れる $ sudo aptitude install haskell-modeghc-modもインストールしておく.emacsへ以下を追加する ;;for haske…