No Such Blog or Diary
どうにかならんかなぁ
- 2005-11-09 (Wed)
- 一般
ASCII24の記事によると『Visual Studio .NET the Spoke Premium 2003』を購入、登録した学生を対象に『Visual Studio 2005 Professional Edition』を追加費用なしでダウンロード提供してくれるらしい.詳しい情報を得ようとだいぶ前に登録したきりの"the Spoke”のサイトへ行ってみるが... 3ヶ月間ログインしないと登録が抹消されますって言われて登録消えているらしい orz. もう一回登録しなおしてもいいものなのかどうか...
- Comments: 0
- TrackBack (Close): -
シャナXI,終クロ6上下購入
- 2005-11-08 (Tue)
- 遊び
終クロ6上巻600ページ弱,下巻600ページ超え.なんだかもう記録に挑戦? 同時に買ったシャナの5冊分って... とりあえず7巻の1250円が何ページになるか楽しみだ,と.(つーか,文庫本のカバーがかかるのだろうか?)
- Comments: 0
- TrackBack (Close): -
ICPCをHaskellでやろうとしたときのテンプレート
ICPCをHaskellでやろうとすると入出力はこんな感じだろうか? とりあえずメインルーチンはデータセットのリストを getProblems で生成し,mapM_ で各データセットに対して solve で解いた結果を putStrLn.show で出力と.
main = getProblems >>= mapM_ (putStrLn.show.solve)
getProblems に関して.各入力セットの先頭の数字が終了フラグになるタイプは,終了なら [] をリターン,そうでなければデータをタプルにして cons をリフトする.
main = getProblems >>= mapM_ (putStrLn.show.solve) getProblems = do [n] <- getNums if n==0 then return [] else do xs <- replicateM n getEntry liftM (xs:) getProblems where getEntry = liftM words getLine getNums = liftM (map read.words) getLine
入力の最初にデータセットの数がある場合は replicateM でリストにすると.
main = getProblems >>= mapM_ (putStrLn.show.solve) getProblems = do n <- liftM (head.map read.words) getLine replicateM n getProblem getProblem = do r <- getNum s <- liftM (head.map read.words) getLine ws <- replicateM s getNum return (r, ws) where getNum = liftM (head.map read.words) getLine :: IO(Double)
あとは EOF で終了という不親切な場合もあるが... 面倒なのでやめとこう.各データセット内の値の取得は,replicateM と liftM (map read.words) getLine と叫べば大体は入力できそう.面倒なのは read の型を明示しとかないとこける可能性があることだろう.
- Comments: 0
- TrackBack (Close): -
みなみけ2巻限定版
- 2005-11-05 (Sat)
- 遊び
売れているのか売れていない(少ない)のかよくわからない上にいろいろと酷評を受けているみたいで.なぜかアマゾンで予約してあって今日届いてたりするのだが,今更なぜ注文したのか疑問に思ったり.ま,いいか.
- Comments: 0
- TrackBack (Close): -
ICPCアジア予選本番
一人でやるとしたら簡単なほうから5問は確実に行くだろうけど... 残りの問題はコーディングが面倒な感じかと思われる.間違っても Haskell では書きたくない.ProblemA でさえHaskell だと面倒だ(インデックス使えんので).
import Control.Monad main = getProblems >>= mapM_ (putStrLn.show.cnt) getProblems = do n <- liftM read getLine if n==0 then return [] else liftM (n:) getProblems primes = let p (x:xs) = x:p (filter (\y -> not (mod y x ==0)) xs) in p [2..] cnt n = cn primes primes 0 0 where cn ps qs sum c = if sum >= n then cn (tail ps) qs (sum-head ps) (c+if sum==n then 1 else 0) else (if n < head qs then c else cn ps (tail qs) (sum+head qs) c)
素数の生成はエレガントに書けるけど入出力がうざい.ところで Y コンビネータのラムダ式ってどうだっけ? olymorphic lambda calculus もよくわからん... free theorem の根拠が...
- Comments: 0
- TrackBack (Close): -