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.…

ghc-mod をインストールして夢のemacs上でhaskellプログラムを補完

ghc-mod をインストールして夢のemacs上でhaskellプログラムを補完http://www.mew.org/~kazu/proj/ghc-mod/en/ をインストールしようとおもう。ubuntuのデフォルトパッケージでやることはあきらめた。 なるべく最新のGHCにして(6.12.2) cabalでいろんなもの…

リストの直積(デカルト積、カルテシアン)を内包表記→do記法→モナド→concatMapの形で表してみる。

リストの直積(デカルト積、カルテシアン)を内包表記→do記法→モナド→concatMapの形で表してみる。 モナドとdoが同じなのがわかって実験 内包表記 [[x,y] | x <- [1,2] , y <- [3,4]] do記法 returnが入っているところで若干 モナドを意識させる do {x <- [1…

virutualboxでubuntuServerをつくりバックグラウンドで起動させるには

virutualboxでubuntuServerをつくりバックグラウンドで起動させるには VirtualboxにubuntuServerを入れる。 ゲストOS名は"Ubuntu Server since 20100831"にするwubuntu serverを選択したのはXとか不要だし、常駐量は小さくしたいしね。 virturalboxを選択し…

haskellのセクションと無名関数と関数名消費

haskellのセクションと無名関数と関数名消費 通常2引数(?)の関数を1引数の関数にするには関数名を消費する以下のような場合 *Main> let f x=x+1 in f 2 3 *Main> let f x=1+x in f 2 3これだと定義と本体と二つに分かれるのであまり好きじゃなく、つい…

haskellのオフサイドルールはバインドでインデントは式の継続だったんだ。

haskellのbindがよくわからない(というかレイアウト) なぜcat6.hsを許すんだろう・・・と、研究開始!a.txt と b.txtを結合するものをまずdo記法で書く --:::::::::::::: --cat1.hs --:::::::::::::: main=do x<-readFile "a.txt" y<-readFile "b.txt" putS…

ghciのプロンプトを短くしつつemacsのhaskellモードと共存させるには

ghci のプロンプトがながすぎ。どうもhaskell-modeがプロンプトをみているみたいで ~/.ghciでプロンプトを設定すると挙動がおかしいので、.ghciの方をemacsにあわせる。以下を~/.ghciに設定する :set prompt "*Main> "ついでに ghciでC-pnで履歴を操作するの…

ubuntu10.04でnfs4をつかう

いままでLAN内の全マシンをNFSでつないでいたのだが先日いきなりマウントできなくなった。 理由がまったくわからず1週間放置していたのだがどうもNFS3->NFS4になったものと思われる。(もしくはnfs3モードでうまく動かなくなった。)ちょうど一週間前ぐらいに…

haskellで簡易lsを作る

苦労の末に Prelude System.Directory> getDirectoryContents "/" >>= return.concatMap (++" ") >>= putStrLn bin lib sbin sys selinux vmlinuz . root boot usr srv cdrom vmlinuz.old initrd.img var tmp dev media opt proc mnt initrd.img.old home lo…

haskellでカレントディレクトリを表示する

haskellでカレントディレクトリを表示する Prelude> :m +System.Directory Prelude System.Directory> setCurrentDirectory "/etc" "/etc" Prelude System.Directory> putStrLn getCurrentDirectory <interactive>:1:9: Couldn't match expected type `String' against in</interactive>…