2006-10-01から1ヶ月間の記事一覧

StateTを使ってより簡潔に?

import Control.Monad.State ten = [0..9] getNum :: StateT [Int] [] Int getNum = StateT $ ?ns -> do{n <- ns; return (n, filter (n/=) ns)} sendmory = do s <- getNum if s==0 then lift [] else return () m <- getNum if m==0 then lift [] else ret…

リストモナドで解く

(追記: http://haskell.g.hatena.ne.jp/nobsun/20061019/alphametic のほうがとてもスマート。) ten = [0..9] getNum :: [Int] -> [(Int,[Int])] getNum ns = do{n <- ns; return (n, filter (n/=) ns)} sendmory l0 = do (s,l1) <- getNum l0 if s==0 then…

SEND+MORE=MONEYをHaskellで解く (from ocaml-nagoya)

名大では、学部生向けのocamlの授業が (情報工学コースではなく) 理学部数学科であるらしい (しかしセミナーとかぶっていて見に行けないので伝聞)。 そこで今日出た演習問題: S E N D + M O R E ---------- M O N E Y (S,M != 0)S,E,N,D,M,O,R,Yはユニーク…