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
関連リンク
- 2004: 01 02 03 04 05 06 07 08 09 10 11 12
- 2005: 01 02 03 04 05 06 07 08 09 10 11 12
- 2006: 01 02 03 04 05 06 07 08 09 10 11 12
今月の一行
- 2006-07-31 [Haskell] 入試問題(その10)
- 2006-07-28 [Haskell] 入試問題(その 9)
- 2006-07-27 [Haskell] 入試問題(その 8)
- 2006-07-26 [Haskell] 入試問題(その 7)
- 2006-07-25 [Haskell] 入試問題(その 6)
- 2006-07-24 [Gauche] srfi-42で、リストを返す関数を使って生成したリストをフラットにする
- 2006-07-21 [Haskell] 入試問題(その 5)
- 2006-07-20 [Haskell] 入試問題(その 4)
- 2006-07-19 [Haskell] 入試問題(その 3)
- 2006-07-18 [Haskell] 入試問題(その 2)
- 2006-07-14 [misc] 入試問題(その 1)
- 2006-07-13 [Gauche] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
- 2006-07-12 [Java] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
- 2006-07-11 [Gauche] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
- 2006-07-10 [quiz] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
- 2006-07-07 [Gauche] 複数のアドレスやポートをlistenする
- 2006-07-06 [CHTML] EUC-JPのページでDoCoMoの絵文字を表示する
- 2006-07-05 [Gauche] MIMEヘッダフィールド名のキャピタライズ
- 2006-07-04 [Namazu] HTMLフィルタがジェームズ・クラーク記法のHTMLの解釈に失敗する現象の回避方法
- 2006-07-03 [Ubuntu] FirefoxにDOMインスペクタがない?
2006-07-31 [Haskell] 入試問題(その10)
http://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/ci-2006-programming-2nd.pdf の最後の問題,問題 4 にも挑戦してみよう.
この問題は付け加えられたルールがちょっと解りにくい. セルが削除された場合,インデックスの大きい側から詰めるとするのが簡単だが,
ただし,c0 が削除された場合は,もとの cn-1 つまり左のセルが c0 の位置 に入る.
とある.このただし書きは,c0を特別扱いすることが意図だと解釈すると. 関数 extrarule :: CellSpace -> CellSpace は
-- Problem 4
extrarule :: CellSpace -> CellSpace
extrarule cs
= case grouping cs of
(n,gs@(g:_)) -> case n of
-1 -> cs'
0 -> if length g >= 3
then case head g of
0 -> rotateL 1 cs'
1 -> rotateR 1 cs' -- c0を特別扱い
else cs'
_ -> rotateR n cs'
where cs' = concatMap add0del1 gs
grouping :: [Int] -> (Int, [[Int]])
grouping xs
= if ngs == 1
then (-1, gs)
else if even ngs
then (0, gs)
else case splitAt (ngs - 1) gs of
(hg:gs,[lg]) -> (length hg, gs++[lg++hg])
where gs = group xs
ngs = length gs
add0del1 :: [Int] -> [Int]
add0del1 xs@(0:_) = if length xs >= 3 then 0:xs else xs
add0del1 xs@(1:_) = if length xs >= 3 then tail xs else xs
ただし書きを無視すると,extrarule 関数の定義は
extrarule :: CellSpace -> CellSpace
extrarule cs
= case grouping cs of
(n,gs@(g:_)) -> case n of
-1 -> cs'
0 -> if length g >= 3
then case head g of
0 -> rotateL 1 cs'
1 -> cs' -- 但し書きを無視
else cs'
_ -> rotateR n cs'
where cs' = concatMap add0del1 gs
となる.ううむ.
--nobsun
2006-07-28 [Haskell] 入試問題(その 9)
よおーし.3-3 にいってみよう.
-- Problem 3-3 cs33 :: CellSpace -- 問題 3-3 の初期セル空間 cs33 = take 860 $ concat $ iterate (0:) [0,1] m33 :: StateFun -- 問題 3-3 状態遷移関数 m33 = gen 129 a33 :: IO () -- 問題 3-3 セル空間状態遷移の表示 a33 = printTransition 860 51 $ iterate (trans m33) cs33
a33 を評価すると.(かなり横に長いけど...)
.#..#...#....#.....#......#.......#........#.........#..........#...........#............#.............#..............#...............#................#.................#..................#...................#....................#.....................#......................#.......................#........................#.........................#..........................#...........................#............................#.............................#..............................#...............................#................................#.................................#..................................#...................................#....................................#.....................................#......................................#.......................................#........................................# ......#...##...###...####...#####...######...#######...########...#########...##########...###########...############...#############...##############...###############...################...#################...##################...###################...####################...#####################...######################...#######################...########################...#########################...##########################...###########################...############################...#############################...##############################...###############################...################################...#################################...##################################...###################################...####################################...#####################################...######################################.. #####...#....#..#..#..##..#..###..#..####..#..#####..#..######..#..#######..#..########..#..#########..#..##########..#..###########..#..############..#..#############..#..##############..#..###############..#..################..#..#################..#..##################..#..###################..#..####################..#..#####################..#..######################..#..#######################..#..########################..#..#########################..#..##########################..#..###########################..#..############################..#..#############################..#..##############################..#..###############################..#..################################..#..#################################..#..##################################..#..###################################..#..####################################..# ####..#...##..................#.......##.......###.......####.......#####.......######.......#######.......########.......#########.......##########.......###########.......############.......#############.......##############.......###############.......################.......#################.......##################.......###################.......####################.......#####################.......######################.......#######################.......########################.......#########################.......##########################.......###########################.......############################.......#############################.......##############################.......###############################.......################################.......#################################.......##################################.... .##.....#....################...#####....#####..#..#####..##..#####..###..#####..####..#####..#####..#####..######..#####..#######..#####..########..#####..#########..#####..##########..#####..###########..#####..############..#####..#############..#####..##############..#####..###############..#####..################..#####..#################..#####..##################..#####..###################..#####..####################..#####..#####################..#####..######################..#####..#######################..#####..########################..#####..#########################..#####..##########################..#####..###########################..#####..############################..#####..#############################..#####..##############################..#####..###############################..#####..################################..##. ....###...##..##############..#..###..##..###.......###........###....#....###....##....###....###....###....####....###....#####....###....######....###....#######....###....########....###....#########....###....##########....###....###########....###....############....###....#############....###....##############....###....###############....###....################....###....#################....###....##################....###....###################....###....####################....###....#####################....###....######################....###....#######################....###....########################....###....#########################....###....##########################....###....###########################....###....############################....###....#############################....###....##############################...... ###..#..#......############.......#........#..#####..#..######..#..##...##..#..##....##..#..##..#..##..#..##..##..##..#..##..###..##..#..##..####..##..#..##..#####..##..#..##..######..##..#..##..#######..##..#..##..########..##..#..##..#########..##..#..##..##########..##..#..##..###########..##..#..##..############..##..#..##..#############..##..#..##..##############..##..#..##..###############..##..#..##..################..##..#..##..#################..##..#..##..##################..##..#..##..###################..##..#..##..####################..##..#..##..#####################..##..#..##..######################..##..#..##..#######################..##..#..##..########################..##..#..##..#########################..##..#..##..##########################..##..#..##..###########################..##..#..##..############################..##### ##........####..##########..#####...######.....###.......####.........#...........##..........................................#...............##...............###...............####...............#####...............######...............#######...............########...............#########...............##########...............###########...............############...............#############...............##############...............###############...............################...............#################...............##################...............###################...............####################...............#####################...............######################...............#######################...............########################...............#########################...............##########################....#### #..######..##....########....###..#..####..###..#..#####..##..#######...#########....########################################...#############....#############..#..#############..##..#############..###..#############..####..#############..#####..#############..######..#############..#######..#############..########..#############..#########..#############..##########..#############..###########..#############..############..#############..#############..#############..##############..#############..###############..#############..################..#############..#################..#############..##################..#############..###################..#############..####################..#############..#####################..#############..######################..#############..#######################..#############..########################..##..### ....####......##..######..##..#.......##....#.......###........#####..#..#######..##..######################################..#..###########..##..###########.......###########........###########....#....###########....##....###########....###....###########....####....###########....#####....###########....######....###########....#######....###########....########....###########....#########....###########....##########....###########....###########....###########....############....###########....#############....###########....##############....###########....###############....###########....################....###########....#################....###########....##################....###########....###################....###########....####################....###########....#####################....###########....######################........## .##..##..####......####.........#####....##...#####..#..######..###.......#####........####################################.......#########........#########..#####..#########..######..#########..##...##..#########..##....##..#########..##..#..##..#########..##..##..##..#########..##..###..##..#########..##..####..##..#########..##..#####..##..#########..##..######..##..#########..##..#######..##..#########..##..########..##..#########..##..#########..##..#########..##..##########..##..#########..##..###########..##..#########..##..############..##..#########..##..#############..##..#########..##..##############..##..#########..##..###############..##..#########..##..################..##..#########..##..#################..##..#########..##..##################..##..#########..##..###################..##..#########..##..####################..######... ..........##..####..##..#######..###..##....#..###.......####....#..#####..###..######..##################################..#####..#######..######..#######....###....#######....####....#######......#......#######......##......#######...............#######................#######........#........#######........##........#######........###........#######........####........#######........#####........#######........######........#######........#######........#######........########........#######........#########........#######........##########........#######........###########........#######........############........#######........#############........#######........##############........#######........###############........#######........################........#######........#################........#######........##################....####..## .########......##........#####....#......##.....#..#####..##..##.....###....#....####....################################....###....#####....####....#####..##..#..##..#####..##..##..##..#####..####...####..#####..####....####..#####..#############..#####..##############..#####..######...######..#####..######....######..#####..######..#..######..#####..######..##..######..#####..######..###..######..#####..######..####..######..#####..######..#####..######..#####..######..######..######..#####..######..#######..######..#####..######..########..######..#####..######..#########..######..#####..######..##########..######..#####..######..###########..######..#####..######..############..######..#####..######..#############..######..#####..######..##############..######..#####..######..###############..######..#####..######..################..##..##..... ..######..####....######..###..##...####....###.....###..........###..#..##...##..##..##..##############################..##..#..##..###..##..##..##..###...............###................###....##..#..##....###....##..##..##....###....###########....###....############....###....####..#..####....###....####..##..####....###....####.......####....###....####........####....###....####....#....####....###....####....##....####....###....####....###....####....###....####....####....####....###....####....#####....####....###....####....######....####....###....####....#######....####....###....####....########....####....###....####....#########....####....###....####....##########....####....###....####....###########....####....###....####....############....####....###....####....#############....####....###....####....##############..........#### ...####....##..##..####....#......#..##..##..#..###..#..########..#.........#..............############################...............#................#..#############..#..##############..#..##...........##..#..##............##..#..##..#########..##..#..##..##########..##..#..##..##.......##..##..#..##..##........##..##..#..##..##..#####..##..##..#..##..##..######..##..##..#..##..##..##...##..##..##..#..##..##..##....##..##..##..#..##..##..##..#..##..##..##..#..##..##..##..##..##..##..##..#..##..##..##..###..##..##..##..#..##..##..##..####..##..##..##..#..##..##..##..#####..##..##..##..#..##..##..##..######..##..##..##..#..##..##..##..#######..##..##..##..#..##..##..##..########..##..##..##..#..##..##..##..#########..##..##..##..#..##..##..##..##########..##..##..##..#..##..##..##..###########..##..##..##..#..##..##..##..############..########..##. ##..##..##..........##..##...####................#.......######.....#######...############..##########################..#############...##############.....###########.......############.........#########...........##########.............#######...............########.................#####...................######.....................###.......................####.........................#...........................##..........................................................................................#...............................##...............................###...............................####...............................#####...............................######...............................#######...............................########...............................#########...............................##########....######...... ...........########........#..##..##############...#####..####..###..#####..#..##########....########################....###########..#..############..###..#########..#####..##########..#######..#######..#########..########..###########..#####..#############..######..###############..###..#################..####..###################..#..#####################..##..#######################...#########################....########################################################################################...#############################....#############################..#..#############################..##..#############################..###..#############################..####..#############################..#####..#############################..######..#############################..#######..#############################..########..##..####..####. ##########..######..######.........############..#..###....##....#....###.......########..##..######################..##..#########.......##########....#....#######....###....########....#####....#####....#######....######....#########....###....###########....####....#############....#....###############....##....#################.......###################........#####################..#..#######################..##..######################################################################################..#..###########################..##..###########################.......###########################........###########################....#....###########################....##....###########################....###....###########################....####....###########################....#####....###########################....######........##....##.. .########....####....####..#######..##########.......#..##....##...##..#..#####..######........####################........#######..#####..########..##...##..#####..##..#..##..######..##..###..##..###..##..#####..##..####..##..#######..##..#..##..#########..##..##..##..###########..##...##..#############..##....##..###############..#####..#################..######..###################.......#####################........####################################################################################.......#########################........#########################..#####..#########################..######..#########################..##...##..#########################..##....##..#########################..##..#..##..#########################..##..##..##..#########################..##..###..##..#########################..##..####..######....##..... ..######..##..##..##..##....#####....########..#####.......##....#.........###....####..######..##################..######..#####....###....######......#......###...............####........#........#........###........##........#####...............#######................#########......#......###########......##......#############....###....###############....####....#################..#####..###################..######..##################################################################################..#####..#######################..######..#######################....###....#######################....####....#######################......#......#######################......##......#######################...............#######################................#######################........#........#######################........##....####..##....#### ...####..................##..###..##..######....###..#####....##...#######..#..##..##....####....################....####....###..##..#..##..####..####...####..#..#############..##..######...######...######..#..######....######..###..#############..#####..##############..#######..####...####..#########..####....####..###########..##..#..##..#############..##..##..##..###############....###....#################....####....################################################################################....###....#####################....####....#####################..##..#..##..#####################..##..##..##..#####################..####...####..#####################..####....####..#####################..#############..#####################..##############..#####################..######...######..#####################..######....##..##......##..##. ##..##..################......#........####..##..#....###..##....#..#####.............##..##..##..##############..##..##..##..#...............##....##..#..##.......###########........####..#..####..#..####.......####..##..####....#....###########....###....############....#####....##..#..##....#######....##..##..##....#########...............###########................#############..##..#..##..###############..##..##..##..##############################################################################..##..#..##..###################..##..##..##..###################...............###################................###################....##..#..##....###################....##..##..##....###################....###########....###################....############....###################....####..#..####....###################....####..##........####........ .........##############..####...######..##.........##..#......##.....###..###########..............############.................#############....##...........#####..#########..######..##.......##.......##..#####..##........##..##...##..#########..##..#..##..##########..##..###..##...........##..#####..##............##..#######..#############..#########..##############..###########...............#############................############################################################################...............#################................#################..#############..#################..##############..#################..##...........##..#################..##............##..#################..##..#########..##..#################..##..##########..##..#################..##..##.......##..##..#################..##..##......######..##..######. ########..############....##..#..####......#######.......####....###..#....#########..############..##########..###############..###########..##....#########..###....#######....####......#####....#####......###......######........#......#######...............########........#......#########......###......##########......#####....###########....#######....############....#########..#############..###########..##############..##########################################################################..#############..###############..##############..###############....###########....###############....############....###############......#########......###############......##########......###############........#######........###############........########........###############..........#####..........###############..........####..####........####.. .######....##########..##.........##..####..#####..#####..##..##..#.....##..#######....##########....########....#############....#########......##..#######....#..##..#####..##..##..####..###..##..###..####..#..####..####..######...####..#####..#############..######..######...####..#######..####..#..####..########..####..###..##..#########..##..#####..##..##########..##..#######....###########....#########....############....########################################################################....###########....#############....############....#############..##..#########..##..#############..##..##########..##..#############..####..#######..####..#############..####..########..####..#############..######..#####..######..#############..######..######..######..#############..########..###..########..#############..########..##....##..######..##... ..####..##..########......#######......##....###....###.............###......#####..##..########..##..######..##..###########..##..#######..####......#####..##.........###............##....#........#....##.......##....##....####..#..##....###....###########....####....####..#..##....#####....##.......##....######....##....#........#######........###........########........#####..##..#########..##..#######..##..##########..##..######################################################################..##..#########..##..###########..##..##########..##..###########........#######........###########........########........###########....##....#####....##....###########....##....######....##....###########....####....###....####....###########....####....####....####....###########....######....#....######....###########....######......##......####......## ...##........######..####..#####..####....##..#..##..#..###########..#..####..###........######........####........#########........#####....##..####..###......#######..#..##########....##...######...##....#####....##....##..##.........##..#..##..#########..##..##..##..##.........##..###..##....#####....##..####..##....##...######..#####..######..#..######..######..######..###........#######........#####........########........####################################################################........#######........#########........########........#########..######..#####..######..#########..######..######..######..#########..##....##..###..##....##..#########..##....##..####..##....##..#########..##..##..##..#..##..##..##..#########..##..##..##..##..##..##..##..#########..##..####..##...##..####..##..#########..##..####..####....####..##..####... ##....######..####....##....###....##..##................#########.......##....#..######..####..######..##..######..#######..######..###..##......##....#..####..#####.......########..##....#..####..#....##..###..##....##........#######.............#######..................#######......#......##..###..##......##......##....#..####....###....####.......####....####....####....#..######..#####..######..###..######..######..######..##################################################################..######..#####..######..#######..######..######..######..#######....####....###....####....#######....####....####....####....#######......##......#......##......#######......##......##......##......#######...............................#######................................#######........##......#......##........#######........##....##..##..##........##..## #..##..####....##..##....##..#..##........##############..#######..#####....##.....####....##....####........####....#####....####....#......####....##.....##....###..#####..######......##.....##.....##......#......##....######..#####..###########..#####..################..#####..####...####......#......####....####....##.....##..##..#..##..##..#####..##..##..##..##..##..##.....####....###....####....#....####....####....####....################################################################....####....###....####....#####....####....####....####....#####..##..##..##..#..##..##..##..#####..##..##..##..##..##..##..##..#####..####....####...####....####..#####..####....####....####....####..#####..#############################..#####..##############################..#####..######....####...####....######..#####..######....##............######......# ........##..##........##...........######..############....#####....###..##....###..##..##....##..##..######..##..##..###..##..##..##...####..##..##....###....##..#....###....####..####....###....###....####...####....##..####....###....#########....###....##############....###....##..#..##..####...####..##..##..##..##....###.....................###..........................###..##..##..#..##..##..##...##..##..##..##..##..##..##..##############################################################..##..##..##..#..##..##..##..###..##..##..##..##..##..##..##..###...............................###................................###....##..##..##..#..##..##..##....###....##..##..##..##..##..##..##....###....###########################....###....############################....###....####..##..##..#..##..##..####....###....####..##....##########..####..####.. #######........######....#########..####....##########..##..###..##..#......##..#..........##..........####............#..............#..##..........##..#..##.......##..#..##..##....##..##..#..##..#..##..##..#..##..##......##..##..#..##..#######..##..#..##..############..##..#..##.............##..#..##..................##..#..###################..#..########################..#.........................#..............................############################################################...............................#................................#..#############################..#..##############################..#..##...........................##..#..##............................##..#..##..#########################..##..#..##..##########################..##..#..##..##.......................##..##..#..##..##......##..########....##....##..# ######..######..####..##..#######....##..##..########........#.........####.......########....########..##..##########...############.......########...........#####...............##.....................................####.................#####...............##########.............###########...........################.........#################.......######################.....#######################...############################..##########################################################..#############################...##############################.....###########################.......############################.........#########################...........##########################.............#######################...............########################.................#####################...................####......######..##....##...... .####....####....##........#####..##..........######..######...#######..##..#####..######..##..######........########..#..##########..#####..######..#########..###..#############....###################################..##..###############..###..#############..########..###########..#########..#########..##############..#######..###############..#####..####################..###..#####################..#..##########################....########################################################....###########################..#..############################..###..#########################..#####..##########################..#######..#######################..#########..########################..###########..#####################..#############..######################..###############..###################..#################..##..####..####......##....####. ..##..##..##..##....######..###......########..####....####..#..#####........###....####........####..######..######.......########....###....####....#######....#....###########..##..#################################........#############....#....###########....######....#########....#######....#######....############....#####....#############....###....##################....#....###################.......########################..##..######################################################..##..#########################.......##########################....#....#######################....###....########################....#####....#####################....#######....######################....#########....###################....###########....####################....#############....#################....###############........##....##..####....##..##.. #................##..####....#..####..######....##..##..##.......###..######..#..##..##..######..##....####....####..#####..######..##..#..##..##..##..#####..##...##..#########........###############################..######..###########..##...##..#########..##..####..##..#######..##..#####..##..#####..##..##########..##..###..##..###########..##..#..##..################..##...##..#################..#####..######################........####################################################........#######################..#####..########################..##...##..#####################..##..#..##..######################..##..###..##..###################..##..#####..##..####################..##..#######..##..#################..##..#########..##..##################..##..###########..##..###############..##..#############..######....##......##..##........# ..##############......##..##.....##....####..##............#####..#....####...............####......##..##..##..##....###....####.......................###......#......#######..######..#############################....####....#########......#......#######........##........#####........###........###........########........#........#########...............##############......#......###############....###....####################..######..##################################################..######..#####################....###....######################......#......###################...............####################........#........#################........###........##################........#####........###############........#######........################........#########........#############........###########....####..##....####........######.. #..############..####........###....##..##......##########..###.....##..##..#############..##..####................##..#..##..##..#####################..#..####...####..#####....####....###########################..##..##..##..#######..####...####..#####..######....######..###..######..#..######..#..######..######..######...######..#######..#############..############..####...####..#############..##..#..##..##################....####....################################################....####....###################..##..#..##..####################..####...####..#################..#############..##################..######...######..###############..######..#..######..################..######..###..######..#############..######..#####..######..##############..######..#######..######..###########..######..#########..##..##......##..##..######..####..# ....##########....##..######..#..##........####..########....#..###..........###########........##..##############.................###################.......##..#..##....###..##..##..##..#########################................#####....##..#..##....###....####..##..####....#....####.......####.......####....####....####..#..####....#####....###########....##########....##..#..##....###########...............################..##..##..##..##############################################..##..##..##..#################...............##################....##..#..##....###############....###########....################....####..#..####....#############....####.......####....##############....####....#....####....###########....####....###....####....############....####....#####....####....#########....####....#######..........####..........####....##.... ###..########..##......####.........######..##....######..##.....#..########..#########..######......############..###############..#################..#####...........##..#................#######################..##############..###..##...........##..#..##..##........##..##...##..##..#####..##..#####..##..##..##..##..##.......##..##..###..##..#########..##..########..##...........##..#########..#############..##############................############################################................###############..#############..################..##...........##..#############..##..#########..##..##############..##..##.......##..##..###########..##..##..#####..##..##..############..##..##..##...##..##..##..#########..##..##..##..#..##..##..##..##########..##..##..##..###..##..##..##..#######..##..##..##..#####..########..##..########..##..##....### ##....######......####..##..#######..####......##..####......###.....######....#######....####..####..##########....#############....###############....###..#########.......##############..#####################....############....#......#########...............######........#..........###........###......................#####..........#........#######........######......#########......#######....###########....############..##############..##########################################..##############..#############....###########....##############......#########......###########........#######........############..........#####..........#########............###............##########..............#..............#######...............................########................#................#####................###....######........######..........##..## #..##..####..####..##........#####....##..####......##..####..#..###..####..##..#####..##..##....##....########..##..###########..##..#############..##..#....#######..#####..############....###################..##..##########..##...####..#######..#############..####..######...########..#..######..#..####################..###..########...######..#####..######..####..####..#######..####..#####..##..#########..##..##########....############....########################################....############....###########..##..#########..##..############..####..#######..####..#########..######..#####..######..##########..########..###..########..#######..##########..#..##########..########..############...############..#####..#############################..######..##############...##############..###..##############..#..##..####..######..####..########......# ........##....##......######..###..##......##..####......##.......#....##........###..........##....##..######........#########........###########.........##..#####....###....##########..##..#################........########......#..##....#####....###########....##....####..#..######.......####.......##################....#....######..#..####....###....####....##....##....#####....##....###........#######........########..##..##########..##..######################################..##..##########..##..#########........#######........##########....##....#####....##....#######....####....###....####....########....######....#....######....#####....########.......########....######....##########..#..##########....###....###########################....####....############..#..############....#....############...........##....####....##....######..####.. #######....##....####..####....#......####......##..####....#####...##....######..#..########....##......####..######..#######..######..#########..#######......###..##..#..##..########........###############..######..######..####.......##..###..##..#########..##....##..##.......####..#####..##..#####..################..##...##..####.......##..##..#..##..##..##....##....##..###..##....##..#..######..#####..######..######........########........####################################........########........#######..######..#####..######..########..##....##..###..##....##..#####..##..##..##..#..##..##..##..######..##..####..##...##..####..##..###..##..######..#####..######..##..####..##..########.......########..##..#..##..#########################..##..##..##..##########.......##########..##...##..##########..#########....##..##..##....##..####....##..# ######..##....##..##....##..##...####..##..####......##..##..###..#....##..####.......######..##....####..##....####....#####....####....#######....#####..####..#...............######..######..#############....####....####....##..#####......#........#######......##........#####..##....###........###....##############......#......##..#####.......................##....##......#......##.........####....###....####....####..######..######..######..##################################..######..######..######..#####....####....###....####....######......##......#......##......###...............................####........##......#......##........#........####....###....####........##........######..#####..######...............#######################................########..#####..########......#......########....#######..##............##......##..##...... .####......##........##........#..##........##..####..........#.....##......##..#####..####......##..##......##..##..##..###..##..##..##..#####..##..###....##.....#############..####....####....###########..##..##..##..##..##......###..####...######..#####..####....######..###......##..#..######..#..##..############..####...####......###..#####################....##....####...####....#######..##..##..#..##..##..##..##....####....####....####....################################....####....####....####....###..##..##..##..#..##..##..##..####..####....####...####....####..#..#############################..##..######....####...####....######...######..##..##..#..##..##..######....######..####....###....####..#############..#####################..##############..######....###....######..####...####..######..##..#####......##########....####........####. ..##..####....######....######.......######......##..########...###....####......###....##..####........####..............#................###........#..##....###..###########....##..##..##..##..#########......................####..#....##..#..####....###....##..##..####....#..####.........####...........##########....##..#..##..####..#....###################..##....##..##..#..##..##..#####.............................##..##..##..##..##..##..##..##############################..##..##..##..##..##..##..##..#...............................##....##..##..##..#..##..##..##.......###########################........####..##..##..#..##..##..####..#..####.......................####..##..####....##..##..#..##..##....###########....###################....############....####..##..#..##..####....##..#..##....####........###..####..########..##..##..######..##.. #......##..##..####..##..####..#####..####..####......######..#..#..##..##..####..#..##......##..######..##..############...##############..#..######.......##..#....#########..##..................#######..####################..##.....##.........##..##..#..##..........##..##.....##..#######..##..#########..########..##.............##.....##..#################......##.....................###..###########################..............................############################.................................#############################....##...........................#####..#########################..######..##.......................##.......##..#####################..##........##..##...................##..#########..##..#################..##..##########..##..##...............##..##...........##..##..######..#....##....######............####......# ..####..........##........##....###....##....##..####..####..................##.........####......####........##########..#..############.......####..#####.......##..#######......################..#####....##################......###....#######...............########........###......#####........#######....######......###########....###......###############..####....###################..#....#########################..############################..##########################..###############################..###########################..##....#########################..###....#######################....####......#####################....#####......###################......######........#################......#######........###############........########..........#############........#########..........####.....##....##..####..##########..##..####.. #..##..########....######....##..#..##....##......##....##..################....#######..##..####..##..######..########.......##########..#####..##....###..#####......#####..####..##############....###..##..################..####..#..##..#####..#############..######..######..#..####..###..######..#####..##..####..####..#########..##..#..####..#############....##..##..#################.....##..#######################....##########################....########################....#############################....#########################......##..#######################....#..##..#####################..##..##..####..###################..##..###..####..#################..####..####..######..###############..####..#####..######..#############..######..######..########..###########..######..#######..########..##..###....##......##....########........##..# ........######..##..####..##...........##....####....##......##############..##..#####........##........####....######..#####..########....###......##..#....###..####..###....##....############..##..#........##############....##...........###....###########....####....####.......##....#....####....###........##....##....#######...........##....###########..##..........###############..###......#####################..##..########################..##..######################..##..###########################..##..#######################..####......#####################..##.........###################............##....#################........#....##....###############....##....##....####....#############....##....###....####....###########....####....####....######....#########....####....#####....######........#..##....####....##..######..######...... #######..####........##......#########....##..##..##....####..############........###..######....######..##..##..####....###....######..##..#..####.......##..#....##....#..##....##..##########.........######..############..##....#########..#..##..#########..##..##..##..##..#####....##...##..##..##..#..######....##....##..#####..#########....##..#########......########..#############....#..####..###################........######################........####################........#########################........#####################....##..####..###################......#######..#################..##########....##..###############..######...##....##..#############..##....##....##..##..##..###########..##....##..#..##..##..##..#########..##..##..##..##..##..####..##..#######..##..##..##..###..##..####..######.......##..##..##......####....####..#####
うわぁーっ.すごい.面白い.
--nobsun
There is no comment.
2006-07-27 [Haskell] 入試問題(その 8)
3-1 は美しい絵が出た.では 3-2 はどうだろう.
-- Problem 3-2
cs32 :: CellSpace -- 問題 3-2 の初期セル空間
cs32 = take 123 [ if count n == 3 then 1 else 0 | n <- [0..] ]
count :: Int -> Int -- 整数を二進数表示したときの1の数
count n = sum $ map snd $ takeWhile ((0,0)/=) $ iterate f dm
where dm = divMod n 2
f (d,_) = divMod d 2
m32 :: StateFun -- 問題 3-2 状態遷移関数
m32 = gen 99
a32 :: IO () -- 問題 3-2 セル空間遷移の表示
a32 = printTransition 123 51 $ iterate (trans m32) cs32
a32 を評価すると
*Main> a32 .......#...#.##....#.##..##.#......#.##..##.#....##.#...#..........#.##..##.#....##.#...#........##.#...#.......#.......... #######..##.#.#.###.#.#.#.##..#####.#.#.#.##..###.##..##..#########.#.#.#.##..###.##..##..#######.##..##..######..######### ......#.#.##.#.#..##.#.#.#.#.#....##.#.#.#.#.#..##.#.#.#.#........##.#.#.#.#.#..##.#.#.#.#......##.#.#.#.#.....#.#......... ######.#.#.##.#..#.##.#.#.#.#..###.##.#.#.#.#..#.##.#.#.#..#######.##.#.#.#.#..#.##.#.#.#..#####.##.#.#.#..####.#..######## .....##.#.#.##..#.#.##.#.#.#..#..##.##.#.#.#..#.#.##.#.#..#......##.##.#.#.#..#.#.##.#.#..#....##.##.#.#..#...##..#........ #####.##.#.#.#.#.#.#.##.#.#..#..#.##.##.#.#..#.#.#.##.#..#..#####.##.##.#.#..#.#.#.##.#..#..###.##.##.#..#..##.#.#..####### ....##.##.#.#.#.#.#.#.##.#..#..#.#.##.##.#..#.#.#.#.##..#..#....##.##.##.#..#.#.#.#.##..#..#..##.##.##..#..#.##.#..#....... ####.##.##.#.#.#.#.#.#.##..#..#.#.#.##.##..#.#.#.#.#.#.#..#..###.##.##.##..#.#.#.#.#.#.#..#..#.##.##.#.#..#.#.##..#..###### ...##.##.##.#.#.#.#.#.#.#.#..#.#.#.#.##.#.#.#.#.#.#.#.#..#..#..##.##.##.#.#.#.#.#.#.#.#..#..#.#.##.##.#..#.#.#.#.#..#...... ###.##.##.##.#.#.#.#.#.#.#..#.#.#.#.#.##.#.#.#.#.#.#.#..#..#..#.##.##.##.#.#.#.#.#.#.#..#..#.#.#.##.##..#.#.#.#.#..#..##### ..##.##.##.##.#.#.#.#.#.#..#.#.#.#.#.#.##.#.#.#.#.#.#..#..#..#.#.##.##.##.#.#.#.#.#.#..#..#.#.#.#.##.#.#.#.#.#.#..#..#..... ##.##.##.##.##.#.#.#.#.#..#.#.#.#.#.#.#.##.#.#.#.#.#..#..#..#.#.#.##.##.##.#.#.#.#.#..#..#.#.#.#.#.##.#.#.#.#.#..#..#..#### .##.##.##.##.##.#.#.#.#..#.#.#.#.#.#.#.#.##.#.#.#.#..#..#..#.#.#.#.##.##.##.#.#.#.#..#..#.#.#.#.#.#.##.#.#.#.#..#..#..#.... #.##.##.##.##.##.#.#.#..#.#.#.#.#.#.#.#.#.##.#.#.#..#..#..#.#.#.#.#.##.##.##.#.#.#..#..#.#.#.#.#.#.#.##.#.#.#..#..#..#..### ##.##.##.##.##.##.#.#..#.#.#.#.#.#.#.#.#.#.##.#.#..#..#..#.#.#.#.#.#.##.##.##.#.#..#..#.#.#.#.#.#.#.#.##.#.#..#..#..#..#... .##.##.##.##.##.##.#..#.#.#.#.#.#.#.#.#.#.#.##.#..#..#..#.#.#.#.#.#.#.##.##.##.#..#..#.#.#.#.#.#.#.#.#.##.#..#..#..#..#..## #.##.##.##.##.##.##..#.#.#.#.#.#.#.#.#.#.#.#.##..#..#..#.#.#.#.#.#.#.#.##.##.##..#..#.#.#.#.#.#.#.#.#.#.##..#..#..#..#..#.# ##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.##.##.#.#..#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#. .##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.##.##.#..#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.# #.##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.##.##..#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#. .#.##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#.# #.#.##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#.#. .#.#.##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#.#.# #.#.#.##.##.##.##.##.##.#.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#.#.#. .#.#.#.##.##.##.##.##.##.#.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#.#.#.# #.#.#.#.##.##.##.##.##.##.#.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#.#..#..#..#..#.#.#.#.#.#. .#.#.#.#.##.##.##.##.##.##.#.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#.#..#..#..#..#.#.#.#.#.#.# #.#.#.#.#.##.##.##.##.##.##.#.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#.#..#..#..#..#.#.#.#.#.#.#. .#.#.#.#.#.##.##.##.##.##.##.#.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#.#..#..#..#..#.#.#.#.#.#.#.# #.#.#.#.#.#.##.##.##.##.##.##.#.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#.#..#..#..#..#.#.#.#.#.#.#.#. .#.#.#.#.#.#.##.##.##.##.##.##.#.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#.#..#..#..#..#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.##.##.##.##.##.##.#.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#.#..#..#..#..#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.##.##.##.##.##.##.#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#.#..#..#..#..#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.##.##.##.##.##.##..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.#..#..#..#..#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.##.##.##.##.##.#.#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##..#..#..#..#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.##.##.##.##.##.#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.##.##.##.##.##..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.# #.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#. .#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.##.##.##.##.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#..#..#..#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#
ちょっと目を細めてながめると,パターンが見える?
--nobsun
There is no comment.
2006-07-26 [Haskell] 入試問題(その 7)
では早速,3-1 を解いてみよう.
-- Problem 3-1 cs31 :: CellSpace -- 問題 3-1 初期セル空間 cs31 = take 100 [ if n == 40 then 1 else 0 | n <- [0..] ] m31 :: StateFun -- 問題 3-1 状態遷移関数 m31 = gen 90 a31 :: IO () -- 問題 3-1 セル空間遷移の表示 a31 = printTransition 100 51 $ iterate (trans m31) cs31
a31 を評価すると
*Main> a31 ........................................#........................................................... .......................................#.#.......................................................... ......................................#...#......................................................... .....................................#.#.#.#........................................................ ....................................#.......#....................................................... ...................................#.#.....#.#...................................................... ..................................#...#...#...#..................................................... .................................#.#.#.#.#.#.#.#.................................................... ................................#...............#................................................... ...............................#.#.............#.#.................................................. ..............................#...#...........#...#................................................. .............................#.#.#.#.........#.#.#.#................................................ ............................#.......#.......#.......#............................................... ...........................#.#.....#.#.....#.#.....#.#.............................................. ..........................#...#...#...#...#...#...#...#............................................. .........................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#............................................ ........................#...............................#........................................... .......................#.#.............................#.#.......................................... ......................#...#...........................#...#......................................... .....................#.#.#.#.........................#.#.#.#........................................ ....................#.......#.......................#.......#....................................... ...................#.#.....#.#.....................#.#.....#.#...................................... ..................#...#...#...#...................#...#...#...#..................................... .................#.#.#.#.#.#.#.#.................#.#.#.#.#.#.#.#.................................... ................#...............#...............#...............#................................... ...............#.#.............#.#.............#.#.............#.#.................................. ..............#...#...........#...#...........#...#...........#...#................................. .............#.#.#.#.........#.#.#.#.........#.#.#.#.........#.#.#.#................................ ............#.......#.......#.......#.......#.......#.......#.......#............................... ...........#.#.....#.#.....#.#.....#.#.....#.#.....#.#.....#.#.....#.#.............................. ..........#...#...#...#...#...#...#...#...#...#...#...#...#...#...#...#............................. .........#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#............................ ........#...............................................................#........................... .......#.#.............................................................#.#.......................... ......#...#...........................................................#...#......................... .....#.#.#.#.........................................................#.#.#.#........................ ....#.......#.......................................................#.......#....................... ...#.#.....#.#.....................................................#.#.....#.#...................... ..#...#...#...#...................................................#...#...#...#..................... .#.#.#.#.#.#.#.#.................................................#.#.#.#.#.#.#.#.................... #...............#...............................................#...............#................... .#.............#.#.............................................#.#.............#.#.................# ..#...........#...#...........................................#...#...........#...#...............#. .#.#.........#.#.#.#.........................................#.#.#.#.........#.#.#.#.............#.# ....#.......#.......#.......................................#.......#.......#.......#...........#... ...#.#.....#.#.....#.#.....................................#.#.....#.#.....#.#.....#.#.........#.#.. ..#...#...#...#...#...#...................................#...#...#...#...#...#...#...#.......#...#. .#.#.#.#.#.#.#.#.#.#.#.#.................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.....#.#.#.# ........................#...............................#...............................#...#....... .......................#.#.............................#.#.............................#.#.#.#...... ......................#...#...........................#...#...........................#.......#.....
おおっ.
--nobsun
There is no comment.
2006-07-25 [Haskell] 入試問題(その 6)
http://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/ci-2006-programming-2nd.pdf の問題 3 にも挑戦してみよう.
その前に,1クロック後のセル空間を計算する関数(trans)と セル空間を表示する関数(showCellSpace)などを定義しておこう. 2006-07-21のプログラムに以下を追加.
type CellSpace = [Int]
trans :: StateFun -> CellSpace -> CellSpace
trans f cs = map f $ zip3 (rotateR 1 cs) cs (rotateL 1 cs)
rotateL,rotateR :: Int -> CellSpace -> CellSpace
rotateL n xs = take (length xs) $ drop n $ cycle xs
rotateR n xs = rotateL (length xs - n) xs
showCellSpace :: Int -> CellSpace -> String
showCellSpace r cs | between 3 2000 (length cs) = take r $ map cell2char cs
| otherwise = error "size-out-of-range"
where cell2char 0 = '.'
cell2char 1 = '#'
between l h n = l <= n && n <= h
大きさ 16 のセル空間 [1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0] を考えよう. これを問1の最初の状態遷移関数 255 で1クロック分遷移させてみよう. 最初が,
*Main> showCellSpace 16 [1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0] "#..###.#.#.#.#.."
遷移後は
showCellSpace 16 $ trans (gen 255) [1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0] "################"
たしかに全部 # になってしまった.
printTransition :: Int -> Int -> [CellSpace] -> IO () printTransition crange trange = mapM_ putStrLn . map (showCellSpace crange) . take trange
printTransition では,0 〜 crange-1 番目のセルを 0 〜 trange-1 クロック まで表示する.
さっきのセル空間の遷移関数 240 番による▽sを今度は 0 〜 15 クロックまで 表示してみよう.
*Main> printTransition 16 16 $ iterate (trans $ gen 240) [1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,0] #..###.#.#.#.#.. .#..###.#.#.#.#. ..#..###.#.#.#.# #..#..###.#.#.#. .#..#..###.#.#.# #.#..#..###.#.#. .#.#..#..###.#.# #.#.#..#..###.#. .#.#.#..#..###.# #.#.#.#..#..###. .#.#.#.#..#..### #.#.#.#.#..#..## ##.#.#.#.#..#..# ###.#.#.#.#..#.. .###.#.#.#.#..#. ..###.#.#.#.#..#
たしかに状態が右へ動いているのがわかる.
--nobsun
There is no comment.
2006-07-24 [Gauche] srfi-42で、リストを返す関数を使って生成したリストをフラットにする
surfi-42のlist-ecを使うと、リストを返す関数で生成したリストは当然「リストのリスト」になる。
gosh> (use srfi-42) #<undef> gosh> (list-ec (: i 12) (list 0 1)) ((0 1) (0 1) (0 1) (0 1) (0 1) (0 1) (0 1) (0 1) (0 1) (0 1) (0 1) (0 1))
結果のリストをフラットにしたいときはappend-ecが使える。
gosh> (append-ec (: i 12) (list 0 1)) (0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1)
--yasuyuki
There is no comment.
2006-07-21 [Haskell] 入試問題(その 5)
http://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/ci-2006-programming-2nd.pdf の問題 2-3 も考えた.
関数の返り値のパターンを考えると,
(1,1,1) → d0 △(1,1,0) → d1 (1,0,1) → d2 ▲(1,0,0) → d3 △(0,1,1) → d4 (0,1,0) → d5 ▲(0,0,1) → d6 (0,0,0) → d7状態遷移関数番号を二進数表記したときの,d1 と d4 および d3 と d6 を入 れ替えてやればよい.
2006-07-20 のプログラムに以下を追加
swap :: Int -> Int -> [a] -> [a] swap n m xs = case splitAt n xs of (xs',y:ys) -> case splitAt (m-n-1) ys of (ys',z:zs) -> xs'++z:ys'++y:zs invert :: Int -> Int invert n = foldl (\ a d -> 2*a+d) 0 $ swap 3 6 $ swap 1 4 $ conv 8 nもとめる関数は invert である.
check3 は invert した結果が自身と同じかどうかをチェックする関数である. すなわち,左右対称な状態遷移関数の番号かどうかがチェックできる.
check3 :: Int -> Bool check3 n = n == invert nこれで全状態遷移関数の番号をフィルターして個数を数えればよい.
*Main> length $ filter check3 [0..255] 64確かに 2-2 の結論と同じである.
パチパチ
--nobsun
There is no comment.
2006-07-20 [Haskell] 入試問題(その 4)
http://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/ci-2006-programming-2nd.pdf の問題 2-2 も考えた.
引数のパターンを考えると,
(1,1,1) △(1,1,0) (1,0,1) ▲(1,0,0) △(0,1,1) (0,1,0) ▲(0,0,1) (0,0,0)非対称なのは2組,この2組の引数に関数を適用した結果のパターンは 2^2 = 4個 対称な引数は4個あるからこちらに関数を適用した結果のパターンは 2^4 = 16個
左右対称な関数は 4 * 16 = 64 個
これもちょいとプログラムを作ってたしかめることができる. 2006-07-19 のプログラムに以下を追加
check2 :: StateFun -> Bool check2 f = f (1,1,0) == f (0,1,1) && f (1,0,0) == f (0,0,1)
この check2 で全状態遷移関数をフィルターして個数を数えれば答えになる.
*Main> length $ filter check2 $ map gen [0..255] 64
パチパチ
--nobsun
There is no comment.
2006-07-19 [Haskell] 入試問題(その 3)
http://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/ci-2006-programming-2nd.pdf の問題 2-1 も考えた.
引数の和は 0,1,2,3 の 4通りしかないから,2^4 = 16 個
状態遷移関数は要素数8の定義域から要素数2の値域への関数が,256個しか ないのだから,ちょいとプログラムを作ってたしかめることができる.
2006-07-18 のプログラムの先頭で,Data.List モジュール をインポートして
import Data.List
以下を追加する.
check1 :: StateFun -> Bool
check1 f = all (1==) $ map (length . nub . map f) arranged
arranged :: [[(Int,Int,Int)]]
arranged = groupBy f $ sortBy g domain
where f (a,b,c) (p,q,r) = a+b+c == p+q+r
g (a,b,c) (p,q,r) = compare (a+b+c) (p+q+r)
arranged は domain を和で分類したもの.これに関数を適用して,分類ごとに あたいが一種類であることを確認すればよい(check1).
この check1 で全状態遷移関数をフィルターして個数を数えれば答えになる.
*Main> length $ filter check1 $ map gen [0..255] 16
パチパチ
--nobsun
There is no comment.
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.
2006-07-14 [misc] 入試問題(その 1)
東京大学大学院情報理工学系研究科創造情報学専攻(なんて長いなまえ^^;) では過去の入試問題が公開されている.
http://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/ci-2006-programming-2nd.pdf
問1なら儂でも解けるかも.
- 全部が1になるような関数 全部の対応を書くと
(1,1,1) → 1 (1,1,0) → 1 (1,0,1) → 1 (1,0,0) → 1 (0,1,1) → 1 (0,1,0) → 1 (0,0,1) → 1 (0,0,0) → 1すべての引数の組み合わせで 1 になるのだから,状態遷移関数の全出力のならびは(1,1,1,1,1,1,1,1)これを二進数として読めば,状態遷移関数の番号が 255 であることが わかる.- 1クロックで状態が右方向に1セル分移動する関数 全部の対応を書くと
(1,1,1) → 1 (1,1,0) → 1 (1,0,1) → 1 (1,0,0) → 1 (0,1,1) → 0 (0,1,0) → 0 (0,0,1) → 0 (0,0,0) → 0すべての引数の組み合わせで次の状態が,今の左隣の状態になればよい. したがって,出力のならびは(1,1,1,1,0,0,0,0)これを二進数として読めば,状態遷移関数の番号が 240 であることが わかる.
これでどうだ?
--nobsun
There is no comment.
2006-07-13 [Gauche] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
別の方法を考えてみた.
(use srfi-27) (define (make-binary-random-list n) (map digit->integer (string->list (format #`"~,|n|,,'0b" (random-integer (expt 2 n))))))
これで本当に 0, 1 がランダムになるんだろうか?
--nobsun
There is no comment.
2006-07-12 [Java] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
各要素が「0または1をとる乱数」から成る長さnのリストを得よ。
久しぶりにJavaで書いてみた。
import java.util.Vector;
class RandList {
static Vector<Integer> makeBinaryRandomList(int length) {
Vector<Integer> bits = new Vector<Integer>();
for (int i=0; i<length; i++) {
bits.addElement(new Integer((int)(Math.random() * 2)));
}
return bits;
}
public static void main(String[] args) {
System.out.println(makeBinaryRandomList(24));
}
}
--yasuyuki
There is no comment.
2006-07-11 [Gauche] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
各要素が「0または1をとる乱数」から成る長さnのリストを得よ。
(use srfi-27) (use srfi-42) (define (make-binary-random-list length) (list-ec (: i length) (random-integer 2)))
--yasuyuki
Very nice site! is it yours too http://apeoixy.com/tqaav/4.html
Very nice site!
comment6,
comment3,
links/go.txt;25;25
ch7nHb http://www.QKiMt6vfLbn1bD0zxU9QchzPHO25ZYPy.com
2006-07-10 [quiz] 各要素が「0または1をとる乱数」から成る長さnのリストを得よ
各要素が「0または1をとる乱数」から成る長さnのリストを得よ。
ex.
gosh> (make-binary-random-list 24) (1 1 1 1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 1 0 1 0 1)
--yasuyuki
There is no comment.
2006-07-07 [Gauche] 複数のアドレスやポートをlistenする
ネットワークサーバを書いていると、複数のアドレス+ポートをlistenしたいことがよくある。 IPv6とIPv4デュアルスタックなサーバ上だったりすれば普通にそうなるし。
で、
(("10.37.129.2" . 80) ("localhost" . 8080))
を与えると、それをlistenするソケットのリストを返してくれる関数が欲しくなるわけだ。
(use gauche.net)
(define (make-server-sockets* hosts)
(define (%avoid-mapped-addr sock addr)
(when (eq? (sockaddr-family addr) 'inet6)
(socket-setsockopt sock |IPPROTO_IPV6| |IPV6_V6ONLY| 1)))
(apply append! (map (lambda (h)
(make-server-sockets (car h) (cdr h)
:reuse-addr? #t :backlog SOMAXCONN
:sock-init %avoid-mapped-addr))
hosts)))
こんな感じ。
gosh> (make-server-sockets* '(("10.37.129.2" . 8080) ("localhost" . 8080)))
(#<socket (listen "10.37.129.2:8080")> #<socket (listen "[::1]:8080")> #<socket (listen "127.0.0.1:8080")>)
gosh>
なお、%avoid-mapped-addrを:sock-initに渡しているのは、 その名の通り、IPv4マップドアドレスをlistenしないようにするための措置。 好みの問題かもしれないが、フィルタリングなどを考える時話がややこしくなるので、 基本的にIPv4マップドアドレスは使わないことにしている。
--び
There is no comment.
2006-07-06 [CHTML] EUC-JPのページでDoCoMoの絵文字を表示する
DoCoMoのCHTMLはShift_JISで記述すべきだが、諸般の事情でEUC-JPを使わなければならない場合がありえる。
EUC-JPのページにDoCoMoの絵文字を埋め込むには16進数のUnicode実体参照を使う。
&#xUUUU;
UUUUの部分は、絵文字を16進Unicodeで表した数字を入力する。
たとえば、
 <a href="link1" accesskey="1">ニュース・天気予報</a><br>  <a href="link2" accesskey="2">スポーツ</a><br>  <a href="link3" accesskey="3">ショッピング</a><br>
と書くと以下の通りに表示される。
ただし最近の機種ならEUCを表示できるが、古い機種でEUCを表示できないものがある。
また、willcomでは同じ方法でDoCoMo絵文字を表示できるが、auは文字化けする。
--yasuyuki
There is no comment.
2006-07-05 [Gauche] MIMEヘッダフィールド名のキャピタライズ
処理の都合で
content-type: text/html
みたいになっているヘッダフィールド名を
Content-Type: text/hml
という見た目にしたい。いや、規格的に見たら前者でもかまわないんだけど、 何というか美的に後者でありたい(笑)。
(define (capitalize-field-name out field-name)
(call-with-input-string field-name
(lambda (in)
(with-port-locking in
(lambda ()
(letrec ((up (lambda (c)
(unless (eof-object? c)
(write-char (char-upcase c) out)
(down (read-char in)))))
(down (lambda (c)
(unless (eof-object? c)
(write-char (char-downcase c) out)
(if (char=? #\- c)
(up (read-char in))
(down (read-char in)))))))
(up (read-char in))))))))
こんなのを定義して、
gosh> (call-with-output-string (cut capitalize-field-name <> "content-type")) "Content-Type"
だけど、capitalize-field-nameの定義がけっこう大げさな気がする。
--び
自己突っ込みだけど、こっちの方が簡単っぽい
(use gauche.collection)
(define (capitalize-field-name out field-name)
(fold (lambda (c prev)
(write-char ((if (char=? #\- prev) char-upcase char-downcase) c) out)
c)
#\-
field-name)
(undefined))
(use srfi-13) (string-titlecase "content-type") => "Content-Type"
がーん。そんな便利なものが...
2006-07-04 [Namazu] HTMLフィルタがジェームズ・クラーク記法のHTMLの解釈に失敗する現象の回避方法
NamazuのHTMLフィルタはHTMLをパーズしているわけではなく、正規表現でタグをマッチさせているだけである。
このため、タグの途中に改行が入る、ジェームズ・クラーク記法と呼ばれる記法のHTMLでは解釈に失敗する。
><head ><title>タイトル</title ></head >
これを回避するには、NamazuのHTMLフィルタであるfilter/html.plで、インデックス対象の本文から改行をすべて削除し、行を連結してしまえば良い。
sub html_filter ($$$$) {
my ($contref, $weighted_str, $fields, $headings) = @_;
$$contref =~ s/\r\n//g;
$$contref =~ s/\r//g;
$$contref =~ s/\n//g;
html::escape_lt_gt($contref);
(以下略)
--yasuyuki
There is no comment.
2006-07-03 [Ubuntu] FirefoxにDOMインスペクタがない?
Ubuntu LinuxでFirefoxをインストールして、いざDOMインスペクタを使おうとするとメニューにない。
https://addons.mozilla.org/firefox/ で探してもDOMインスペクタ単体では検索できない。
途方に暮れて、
apt-cache search ^firefox
などと探してみると、
firefox-themes-ubuntu - Firefox themes matching the Ubuntu desktop look firefox-webdeveloper - web developer extension for the Firefox web browser firefox - lightweight web browser based on Mozilla firefox-dbg - Debugging information for firefox firefox-dev - Development files for Mozilla Firefox firefox-gnome-support - Support for Gnome in Mozilla Firefox firefox-dom-inspector - tool for inspecting the DOM of pages in Mozilla Firefox
何と別パッケージになっているではありませんか!
sudo apt-get install firefox-dom-inspector
これでやっとDOMインスペクタが使える...
--yasuyuki
There is no comment.
There is no comment.