Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
2006-07-18 [Haskell] 入試問題(その 2)
2006-07-14の問題で,状態遷移関数の番号から,実際に 状態遷移関数を構成するプログラムがあると便利かも.というわけで作成して みた.
type Fun a b = a -> b -- 関数
add :: Eq a => a -> b -> Fun a b -> Fun a b -- 対応の追加
add x y f k = if x == k then y else f k
type StateFun = Fun (Int,Int,Int) Int -- 状態遷移関数の型
gen :: Int -> StateFun -- 状態遷移関数の生成関数
gen n = foldr (uncurry add) (error "out of domain") (zip domain (conv 8 n))
conv :: Int -> Int -> [Int] -- 整数の二進数表現
conv d n = reverse $ take d $ map snd $ iterate f dm
where dm = divMod n 2
f (d,_) = divMod d 2
domain :: [(Int,Int,Int)] -- 状態遷移関数の定義域
domain = map (toTriple . conv 3) [7,6..0]
where toTriple [x,y,z] = (x,y,z)
255 番の状態遷移関数は gen 255 で作れる.これで domain をマップすれば [1,1,1,1,1,1,1,1] なるだろう.また,gen 94 で domain をマップすれば [0,1,0,1,1,1,1,0] になるはず.
*Main> map (gen 255) domain [1,1,1,1,1,1,1,1] *Main> map (gen 94) domain [0,1,0,1,1,1,1,0]
パチパチ
--nobsun
There is no comment.