wvogel日記

自分用の技術備忘録が多めです.

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

Parsec(3)

今から友人宅に行くので、その前に即興で書き上げたパーサー 2011/07/31 →07.31,2011 とするようなものです。 import Text.Parsec import Text.Parsec.String num :: Parser String num = many1 digit date :: Parser String date = date' >>= return.(\(y:m…

IP adress with Parsec

Parsecを練習しなければ! ということで 簡単なパーサーとして、 A.B.C.D のようなIPアドレスから、数値のリスト、 [A,B,C,D] を生成するパーサーを作ってみた エラー処理も何もない、単純にドットを消していくだけのパーサです import Text.ParserCombinato…

貧乏神

落語で、片棒に変更かとか色々あったけど、 なんかもう面倒だし、他のネタじゃモチベーション上がらんし、ということで、夏はやはり貧乏神をします。 というわけでネタ帳をつけてるんですが 面倒ですねー。 ちょっと集中してネタ帳おこしをばするぜよ(from …

Applicative

import Control.Applicative main = do a <- getLine b <- getLine print $ f a b f :: String -> String ->Int f a b = (+) (read a) (read b) これは勿論動きます では、ghci上で上記のようにfを宣言し、Control.Applicativeモジュールをインポートしたう…

Parsec(2) test

Parsecを調べたら出てくるサイト達、並びに友人が書いてくれた記事を元に勉強を続ける。 とりあえず、多分一番成果が出やすく作業も進めやすいのは電卓だろうということで。 私も電卓を作ることを目標とする。 まずは数値の読み込み。 import Text.ParserCom…

Project Euler 8

f8 :: Int -> Int f8 0 = 1 f8 x = (f8 $x`div`10) * (x`mod`10) euler8 :: String ->Int euler8 "\n" = 0 euler8 xs = maximum $(f8 $read $take 5 xs):[euler8 (drop 5 xs)] main = readFile "temp.txt" >>= \fs -> print $ euler8 fs サイトにあった数字…

Parsec.Expr

うう...... Parsecいじっていたけれど、やはりいきなり書き始めるのはなかなかに辛いものがある。 ということでhttp://www.lab2.kuis.kyoto-u.ac.jp/~hanatani/tmp/Parsec.html にあるサンプルソースコードを読んでまずは流れを理解することにする。 module …

Project Euler 45

trif :: (Integral a)=> a -> a trif n = (n+1)*n `div` 2 hexf :: (Integral a) => a -> a hexf n = n*(2*n-1) pentaf::(Integral a) => a -> a pentaf n = n*(3*n-1) `div` 2 divisors :: (Integral a) => a-> [a] divisors n =filter ((==0).(n`mod`)) [2…

Project Euler 42(3)

filter関数利用に書き直しただけ import Data.Char import Data.Maybe alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" table = zip alphabets [1..] trinum = map trifunc [1..] euler42 :: String -> Bool euler42 str = wordvalue str `elem` (takeWhile (<=wo…

Project Euler 42(2)

我ながらあほらしい。 どうしてこんなことに気がつかなかったんだ..... 昨日メモリリークしたのは、単純に無限リストを使っているからです。 euler42 :: String -> Int euler42 str = case (wordnum str `elem`) trinumbers of True -> 1 False -> 0 とあり…

2日目

試験2日目が無事終わりました。 朝一から熱、統計力学 解けそうな問題をさくさくと。 どんなもんですかね。次、解析学。 これがなんと意外や意外。 とても簡単!!! 計算ミスしていなければ大丈夫そうです、て、当たり前か笑昼食を食堂でMととったあと、グ…

Project Euler 42

さてさて。 今日も今日とてeuler なかなかうまくいきませんね。 とりあえず、ソースコード import Control.Monad import Data.Char import Data.Maybe alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" table = zip alphabets [1..] trinumbers = map trifunc [1..…

Project Euler 335

で........できた...... 数日前から時勉強の合間合間、否、これを考える時間の合間合間に勉強しながら完成。 euler335の問題。 と言っても、未完成なんですけど。 本当はk=0→10^18Σ(2k+1)の豆の移動数をmod7^9で出力、としなければならないんですが。 きっと…

型付λ?

型付きλ計算って、こういうことなんだろうか Prelude> :{ Prelude| let { Prelude| f::[String]->(Int,Int); Prelude| f = \(x:y:_) -> (read x,read y) Prelude| } Prelude| :} Prelude> f ["23","43"] (23,43) なんか違う気がする........ あと、上のfにお…

ついでに、型クラスも軽く勉強してみる。 http://www.sampou.org/haskell/report-revised-j/basic.html にある相関図はとても分かり易い。 なるほど。 前回Combinate関数を作ったとき、 NumではなくIntegralを使うとコンパイルが通った理由がよくわかる。 で…

ghci複数行定義

量子論がひと段落ついたので、ghciを実験。 ghciを、関数試験用として利用価値を高めるため、複数行にわたる関数定義の書き方をば。 Prelude> :{ Prelude| let { Prelude| fibo 1 = 1; Prelude| fibo 2 = 1; Prelude| fibo n = fibo (n-1) + fibo (n-2) Prel…

C,Haskell

しばらくHaskellでしか書かないと宣言して暫くがたった気がするけど。 C言語を触ってしまった..... いやでも!そのあとHaskellで書き直したから、とか言い訳してみる。 ネットで昨夜見つけた問題です m人がn個の問題を解き、そのうちの最多正当数を答えなさ…

C Code

うぬぬー プログラムを採点してくれるAT CODERというやつで問題を解き提出してみるけれど、うまくいかないもんですね。 ことごとく、数問に対して正しい答えが得られない、って返ってくる...... なぜだ。 いやまあ、ソースコードの問題なんですけど。 なにか…

中間演算子

前回Haskellで書いた、Combinationを求める関数 kaijo :: Integral a =>a->a kaijo k = foldr (*) 1 [1..k] combinate :: Integral a => a -> a -> a combinate n r = (kaijo n)`div`(kaijo r * kaijo (n-r)) 型クラスをまだよく理解していないのですが、コ…

広報

今日は朝、そして夕方にそれぞれ試験が2つ。 情報通信と電磁気学。 どっちも微妙な出来だったなー。 いや、電磁気学は出来たけど、ボンミスしてそう。これで残るはあと8つ!電磁気学の試験が早めに終わったので、けんぴ、鮫と三人でキャンパス移動。 共通講…

階乗

昼間、Eulerの問題を解いていて気になったのでちょっとGHCiで調べてみた Prelude> :t foldr foldr :: (a -> b -> b) -> b -> [a] -> b Prelude> foldr (*) 1 [1..0] 1 Prelude> foldr (*) 1 [0..1] 0 Prelude> :t foldl foldl :: (a -> b -> a) -> a -> [b] …

Project Euler 53

main =getLine >>= \n-> (print $ sum $ map euler53 [1.. read n]) euler53 :: Integer -> Integer euler53 n = euler53' n n euler53' :: Integer -> Integer -> Integer euler53' n 0 = 0 euler53' n r = check53 (combinate n r) + euler53' n (r-1) kai…

Project Euler 70

最近、なるべくパターンマッチを使わないで書けないものかと模索中。 何がいい書き方なのかよくわからないけれど、関数型言語なのだからなるべく関数に重点を置いて書いてやりたい。 パターンマッチに依存する癖をつけると、Cで書くif文のようなものになって…

小豆島?

落研合宿前の友人との旅行企画! に今小豆島を候補に入れてもらった! わくわく。 結局どこにいくのかはっまだ決定しないけれど、何にせよ楽しみです

Project Euler 340

a = 50 b = 2000 c = 40 main = putStrLn s s :: String s = show.sum $ map f [0..b] f :: Integer -> Integer f n | n > b = n - c | n <= b = f (a+ f (a+ f (a+ f (a+n)))) 試験勉強してたらHaskell触りたくなって 340番の問題に挑戦! これは例題として…

Codec.Image.PNG

なにやら便利そうなものがやっぱりあるじゃないですか PNGのためにあるような感じのCodec.Image.PNG前回作ったローダとしては、幅、高さ。 内容としては、画像のロードやαチャンネルがあるみたい。 なるほどー ただ、こいつを自分の環境に入れ込む方法が分か…

Project Euler 16

euler16 :: Integer -> Integer euler16 n | n < 10 = n | otherwise = (n`mod`10) + (euler16 (n `div`10)) main = print $ euler16 (2^1000) 実行結果 1366

姫路

えーっと。 一昨日の日記! 姫路まで小旅行してきました。 山陽電鉄を使って80分も揺られてしまった。 乗る電車の選択を間違えた笑 駅数数えてみたら、47位あったwww 参った参った。 とりあえず到着したのち、どこを観光しようかとなって、なにやらおしゃ…

複数file Compile

ソースコードが長くなってくると、やっぱり別々のファイルに書いてコンパイル出きないと困るー というわけで。 makeコマンドを使う方法があったはずだけど、ちょっとやり方忘れたのでやってみた。 要はモジュールを作ったらいいんですよね用意したテストモジ…

State(2)

Haskellwikiにあるサンプルプログラムを動かして、読んでみた。 なるほど、内容は簡単に理解できた。 import Control.Monad.State type GameValue = Int type GameState = (Bool, Int) playGame :: String -> State GameState GameValue playGame [] = do (_…