wvogel日記

自分用の技術備忘録が多めです.

Project Euler 70

最近、なるべくパターンマッチを使わないで書けないものかと模索中。
何がいい書き方なのかよくわからないけれど、関数型言語なのだからなるべく関数に重点を置いて書いてやりたい。
パターンマッチに依存する癖をつけると、Cで書くif文のようなものになってしまう、と思うのです。
Haskell使いはソースコード書くとき、どういうことに気をつけてるのか気になる。

euler70 :: Integer -> Int
euler70 n = (length [1..n])-(length $ filter f70 [2..n])
  where
      f70 x = any (check x) $ filter (check n) [2..n]

check :: Integer -> Integer -> Bool
check n = (==0).(n`mod`)

あんまりカリー化した関数を書いたことがなかったので
部分適用を書いてみた。
euler70の問題。
コード自体はわりかしすっきり書けた気がするけど、前問同様、87109を渡してやると、やっぱりメモリが足りないとか言われる......
うーん。
べつの方針をとってやらないとダメかな。
計算すべきリストをいくつかに分割してやるとか、ファイルに実行結果を書き出し→更新して保存してやるとか。


あ、それで思い出した。
今日、衝動的にKUPCに参加登録してしまったんだった.....
パソコン甲子園以来だなー。
まあ、いい結果出せるとは思わないけれど勉強させてもらって雰囲気を楽しんでこよう。