2010-01-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…

project euler problem 15

この問題はスタートである左上をを上へ右下を下へ持っていき各点を通る組み合わせは以下の図の様になる。これはパスカルの三角形である。ということで求めるものは一辺nマスの場合、(a+b)^(2*n)の真ん中の係数が求めるもの。パスカルの三角形は以前 id:nobsu…

project euler problem 14

遅延評価の方が遅くなる場合なのがこの問題。 $ echo "main=print $ foldl (+) 0 [1..10^4]" > a.hs; ghc -v0 a.hs ; sleep 1; ./a 50005000 $ echo "main=print $ foldl (+) 0 [1..10^5]" > a.hs; ghc -v0 a.hs ; sleep 1; ./a 5000050000 $ echo "main=pri…

haskell アドホック多相

アドホック多相の意味がわかったかも今までパラメータ多相でf x=x+1を型宣言しても以下の様にエラーが出ていた Prelude> let f::a->a ; f x=x+1 <interactive>:1:21: Could not deduce (Num a) from the context () arising from the literal `1' at <interactive>:1:21 Possible fix: </interactive></interactive>…

project euler problem 10

problem 10をときなおしてみた。 import Data.Time main=do stime <- getCurrentTime print $ sum $ takeWhile (<2000000) primes getCurrentTime >>= return.(`diffUTCTime` stime) >>= print primes = 2:[x|x<-[3,5..],isPrime x] isPrime x = all ((/=0).…

haskellで日時を扱う。

現在の日付を得る Prelude Data.Time> getCurrentTime >>= return.utctDay >>= print 2010-09-09 Prelude Data.Time> getCurrentTime >>= return.toGregorian.utctDay >>= print (2010,9,9)5秒後の時間を得る Prelude Data.Time.Clock> getCurrentTime >>= …

haskell 一行で関数定義

ghci使う上で1行で関数定義したいことが多い。 パターンマッチを一行で行うのにちょっとなやんだ。 まさかセミコロンで二回宣言するとは…って複数行でもそうだもの… if 単なる条件分岐だけどついこっちで書いちゃいそうになる。 *Main> let f x = if x==0 th…

GHCでwaitをかける

GHCだけでしか有効でないみたいなんだけど *Main> :m +GHC.Conc *Main> threadDelay 3000000これで3秒のウエイトがかかる秒単位だと *Main> :m +System.Posix *Main> sleep 3 0

ghci内で実行時間を知る

追記 2010/09/13 読んでなかった orz 2.8.1. GHCiオプションGHCiオプションは、:setで有効化、 :unsetで無効化できる。利用できるGHCiオプションは以下のものである。 (中略) s 一つ式を評価するごとに、経過時間や確保されたバイト数などの統計情報を表示…

haskellのリストと比較

haskellってリストが比較できるのか気がついていなかった。 *Main> [1,2,3]==[1,2,3] True *Main> [1,2,3]==[1,2] False *Main> [1,2,3]==[1..] Falseさすが遅延評価 *Main> [1..]==[1..] ^CInterrupted.やっぱかえってこないよな。 *Main> let factors x=[y…

ネットワーク接続されているBrother MFC-830CLNをubuntu10.04で利用する

ネットワーク接続されているBrother MFC-830CLNをubuntu10.04で利用する なぜそんな古いプリンタがあるのかって?そりゃ、日頃プリンタを使わないからそのままになってるんだよ。FAXと電話にもなるし意外に長持ちする。Brother Solutions Center からMFC-410…

接続先のIPアドレスの一覧を出す

接続先のIPアドレスの一覧を出す $ cat /var/log/auth.log | ruby -e 'STDIN.read.scan(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){|addr| puts addr}' | sort | uniq #接続先のIPアドレスの一覧を出す

rubyでipアドレスを得る

まあ、nicを複数実装してるとまずいけど… $ ruby -e '`ifconfig`=~/(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})/m;puts $1' 10.168.8.1

GHC-HEAD の追っかけをやってみる

最新のGHCを入れよう。そうしよう。踏み台としてまず 6.12.2をもってきて ~/ghc-6.12 にインストールする。(後で消せるように) $ wget http://www.haskell.org/ghc/dist/6.12.2/ghc-6.12.2-i386-unknown-linux-n.tar.bz2 $ tar xvf ghc-6.12.2 $ cd ghc-6.…