2010-01-01から1年間の記事一覧
ブルートフォースで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ペンス硬貨を両替していく方法が思い…
問題どおりだと以下のとおり 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…
たぶん組み合わせの出力と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…
なんどやってもおかしいと思ったのは 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 …
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…
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 増分…
フェルマーの小定理をみると 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とい…
あっさり終わった。 項数を出すのに[1..]とzipしている点で遅くなるかと思ったがまったく問題なかった。 main = print $ head $ dropWhile ((
面倒だったので 力技で行ったら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…
簡単だった。 import Data.List main = print $ (sort $ permutations [0..9]) !! (10^6-1)
まあ問題なし。 [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"..…
完全数を除外するのを忘れてた。 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)
久しぶりに簡単な問題だった。 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>…
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…
最後の二行を 左を合わせてzipWith (+)したものと 右を合わせてzipWithしたものを比較し残りのものと置換して最後までやる上からたどる方法は配列でも使わないと無理、速度的にも無理だけど・・・ main = print $ g a67 g x | length x==1 = x | otherwise =…
組み合わせの問題なので内包表記が大活躍する。 concatMapの方が読みやすいかもしれない。 main = print $ length $ concat one2thousand one2nine = ["one","two","three","four","five","six","seven","eight","nine"] zero2nine = "":one2nine ten2ninete…
GHCiはTabで補完するのにemacsがM-C-iでは耐えられない。 そこでtab -> 補完 shift+tab -> インデントとやってみるhaskell-mode は aptitudeで入れる $ sudo aptitude install haskell-modeghc-modもインストールしておく.emacsへ以下を追加する ;;for haske…
この問題はスタートである左上をを上へ右下を下へ持っていき各点を通る組み合わせは以下の図の様になる。これはパスカルの三角形である。ということで求めるものは一辺nマスの場合、(a+b)^(2*n)の真ん中の係数が求めるもの。パスカルの三角形は以前 id:nobsu…
遅延評価の方が遅くなる場合なのがこの問題。 $ 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…
アドホック多相の意味がわかったかも今までパラメータ多相で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>…
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).…
現在の日付を得る 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 >>= …
ghci使う上で1行で関数定義したいことが多い。 パターンマッチを一行で行うのにちょっとなやんだ。 まさかセミコロンで二回宣言するとは…って複数行でもそうだもの… if 単なる条件分岐だけどついこっちで書いちゃいそうになる。 *Main> let f x = if x==0 th…
GHCだけでしか有効でないみたいなんだけど *Main> :m +GHC.Conc *Main> threadDelay 3000000これで3秒のウエイトがかかる秒単位だと *Main> :m +System.Posix *Main> sleep 3 0
追記 2010/09/13 読んでなかった orz 2.8.1. GHCiオプションGHCiオプションは、:setで有効化、 :unsetで無効化できる。利用できるGHCiオプションは以下のものである。 (中略) s 一つ式を評価するごとに、経過時間や確保されたバイト数などの統計情報を表示…
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で利用する なぜそんな古いプリンタがあるのかって?そりゃ、日頃プリンタを使わないからそのままになってるんだよ。FAXと電話にもなるし意外に長持ちする。Brother Solutions Center からMFC-410…
接続先の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アドレスの一覧を出す
まあ、nicを複数実装してるとまずいけど… $ ruby -e '`ifconfig`=~/(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})/m;puts $1' 10.168.8.1
最新の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.…