No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1286 | 1287 | 1288 |...| 1316 | 1317 | 1318 || Next»

提出されてた冪ソートのプログラムの感想

単位を取っているにもかかわらず講義を聞きに行っていることはどうでもよいとして,講義を取っている人の提出したプログラムの動作状況一覧を見てきた.速い人は速いなぁと感心する一方で,半分以上のプログラムがメモリ不足で

0.1M冪のソートもできないのは悲しいかなとおもってみたり.Haskell の 28行コードでさえ512Mメモリで 1M冪までソートできるのに... ま,気を取り直して次回の課題でもやるか.

花映塚

体験版Ver0.02 を小一時間ほどやってノーマルで全員クリア.前回のバージョンから何が変わっているか良く分からなかったり.とりあえず,使える自機が増えることを切に願う.

それにしても,キーボードでやってると左手が痛すぎる... 中指の連射とか薬指でのスピードのこまめな切り替えとか...

リスト2分割

研究室のメンバーが Haskell でリストをワンパスで2分割するプログラムを書いていたので便乗.

halfSplit l = let (len, ret) = halfSplit' (div len 2) l in ret
 where
  halfSplit' _ []     = (0, ([],[]))
  halfSplit' n (x:xs)= 
    let (len, ps) = halfSplit' (n-1) xs
    in (len + 1, if n > 0 then (x:fst ps, snd ps) else (fst ps, x:snd ps))
 
halfSplit2 l = let (len, ret) = halfSplit' (div len 2) l in ret
 where
  halfSplit' _ []     = (0, ([],[]))
  halfSplit' n (xxs@(x:xs))= 
    let (len, ps) = halfSplit' (n-1) xs
    in (len + 1, if n > 0 then (x:fst ps, snd ps) else ([], xxs))

halfSplit だとリストの後ろ半分も再構成しているが,halfSplit2 のようにすると後ろ半分の再構成がない分簡約ステップ数が減る.実際,Hugs で :set +s して簡約数とかを見てみると,

Main> halfSplit [1..100]
(4619 reductions, 8790 cells)
Main> halfSplit2 [1..100]
(3832 reductions, 7950 cells)   

のようにそれなりに差が出る.

土産

どうでも良いが,土産は英語で 「souvenir」(すーべにあ)らしい.

Haskell で実行トレース

Haskell でプログラムを動かしたときに,その実行とレースを取りたいことが時々?ある.でも,一般にHaskellで文字列を出力しようとするとモナドが出てきて面倒.

で,簡単にそれをやる方法があった.Debug.Trace.trace という関数でそれが簡単にできる.例えば mis の途中結果を知りたければ

import Debug.Trace
mis [] i = i
mis (x:xs) i = trace (show x ++" with "++show i) (mis xs (max i 0 + x))

とすれば途中結果が見れる.かなりありがたいかも.ただ,表示ために本来計算しない部分を計算したりすると動作が変わるので注意.

縁取りで文字列表示

D3DXFont を使うと GDI を使わずに DirectX の世界だけで文字列を表示できる.で,早速それを使って描いてみたわけだが文字の縁がないので少々見にくい.そこで縁取りを入れてみることにした.

やり方は一番単純なやつで,縁の色で上下左右にずらした文字を先に描画,そのあと目的のを真ん中にと.これをやると5回描画が必要だけど,たかが文字列なので気にしない.他にうまいやり方ってあるのかなぁ?

«Prev || 1 | 2 | 3 |...| 1286 | 1287 | 1288 |...| 1316 | 1317 | 1318 || Next»
Search
Feeds

Page Top