Life Goes On

まあまあだけど楽しんでる方です

2009-01-01から1年間の記事一覧

if を追放する

Kコンビネータと真偽値に関する話題が挙がっていたので、それを使って何か書いてみようと思いました。 条件分岐と言えば FizzBuzz。以下のようなプログラムを考えます。 main = mapM putStrLn [ max (show n) $ fizz n ++ buzz n | n <- [1..100] ] fizz n =…

速い素数の求め方

ちょっと前に haskell-cafe で速い素数の求め方が話題になっていました。 どんなもんだか確認した結果を記録。 僕がよく使ってたコードはこんな感じ。改めて見るとツッコミどころ満載です。 106 番目の素数を求めるのに手元のマシンで 2 分以上かかります。 …

Turing Machine

anarchy golf - Turing Machine にハマりました。 最終的に通したコードはこんな感じ。空白を削って 168B です。 main = interact $ f "" 0 2 . map words . lines f s i j m | j<2 = s | 0<1 = f (take i s ++ a : drop(i+1)s) (max i 0 + b%61) (c%63) m w…

S コンビネータいろいろ

上のエントリでのプチ収穫。 モナドとコンビネータ論理のコラボ!とか喜んでたら、既に先達が。 [Haskell-cafe] Point-free style 【オブジェクト倶楽部: 2008-33号】 import Control.Monad.Reader s = flip (>>=) . flip k = return そういえばArrowでも書…

Reader モナドは引数隠蔽モナド

以前にもエントリを書きましたが、Readerモナドがさっぱり分からないので、もう一度勉強してみました。 あまり深く考えずに Reader a を a -> と読み替えると、関数の型は以下のようになります。 関数 型 等価な関数 (>>=) (a->b) -> (b->a->c) -> a -> c (=…

Problem 256 を 紹介する - 落書き、時々落学 Problem 256 - Project Euler面白そう! でも僕は 253問目 が解けず、止まったままです。皆さん代わりに解いてください。

squill

squill というDBアクセスのための DSL があります。 https://squill.dev.java.net/ ざっと触ってみたのですが、Tupleクラスとか用意されていて、似たようなO/Rマッパーと比べてもなかなかよくできている感じ。 Javaでここまでできれば十分だと思うのですが、…

HaskellDB

HaskellDBを触っています。 基本が射影と制限と直積(関係代数 - Wikipedia)で、INNER JOIN ましてや OUTER JOIN なんて完全に無視してるところとか、NULL可の列とNULL不可の列をそのままでは比較できないところとか、とにかく理論派です。現場の都合なんて考…

LINQテクノロジ入門

LINQテクノロジ入門 MS VS2008による新たなクエリ構築技法 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)作者: 赤間信幸出版社/メーカー: 日経BP社発売日: 2008/07/24メディア: 単行本購入: 2人 クリック: 43回この商品を含むブ…

Google Code Jam Round 1B

Dashboard - Round 1B 2009 - Google Code Jam 終わりました。 A と B の Small と Large をそれぞれ通して 56 点。とりあえず先には進めるようですが、860位というイマイチな成績でした。 今回は C が難しくて上位陣でも解いている人は少なかったので、点数…

傾向と対策

先週から、Google Code Jam に参加してます。 まずは今さらながら Qualification Round を振り返り。 聞いていた通り問題は難しくなかったです。時間も丸一日あったし。 個人的な課題は何といってもスピード。簡単な問題を一つ解くのに2時間以上かかってい…

夏休み

海に行ってきた。もう十分休んだだろう。そろそろ動き出さないと。

252

1年以上かかって、ようやく、252問完答。 最後に残った問題は、Problem 198、Problem 241、Problem 252 でした。どれも手強かった。 Problem 198:やっぱり最難問題。Stern–Brocot tree を使おうと思ったけど、速い実装が書けなかったり、微妙な勘違いがあっ…

日食

リストの正格評価

ひさしぶりに Project Euler を解いて、学んだことをつらつらと。 要約すると、リストの正格評価の仕方を覚えたよ、という話です。 動的計画法を使う部分和問題で、もともとのコードはこんな感じ。リストにメモ化して、foldl で 250250 段の再帰処理をすると…

ナップサック問題

のためのテンプレ。 type Weight = Int type Value = Int table :: [(Weight, Value)] -> [Value] table is = foldl nextLine (repeat 0) is where nextLine ps (wi,pi) = 0 : map memoCell [1..] where -- for 0-1 knapsack problem memoCell w = if w

S コンビネータ = ap

よく考えたら、lambdabot パッケージを全部入れなくても、pointfree パッケージだけ入れればいいので、andLinux まで入れる必要はなかったのでした。 それはさておき、何をしたかったのかというと、S コンビネータがどういう風に表現されるのか知りたかった…

andLinux 体験

というわけで、andLinuxをインストールしてみました。インストール自体はインストーラ一発なのでラクチン。面倒なので設定も全部デフォルト。 インストールするときにユーザとパスワードを登録するのですが、root ユーザのパスワードを登録しません。 root …

Windows PC(ノート)で簡単に使える Linux は?

僕はへたれプログラマなので、ふだんは Windows 使ってます。 特にそれで不自由を感じたことは無かったのですが、この間、Haskell の lambdabot パッケージ(自動で pointfree スタイルに変換してくれるやつ)を入れようとしたら、依存してる unix パッケー…

指定日以前の最新値を取り出す

SQL

sqlである日以前の最新の時の値を取り出す - imHo を見て、書いてみました。 mokehehe さんのとは逆に、日付→残高→口座の順に取得するイメージ。 Oracle だと date は予約語なので名前を変えたり、↓の本の影響で id → account_id としたりしてます。 結合す…

Gtk2Hs(Carino)でお絵描き

ユーザインタフェースってどうも苦手で、Java でも Swing とか使ったことないのですが、お絵かきに挑戦してみました。 Haskell で GUI を作るには、wxHaskell とか Gtk2Hs とかあるらしい。とりあえずサンプルが簡単に見つかった Gtk2Hs を選択。↓からダウン…

Haskell の乗算は FFT らしい

Haskell の乗算は高速フーリエ変換を使ってると聞きました。 軽く確かめてみたら、だいたい O(n * log n) なので、多分そうなんだと思います。 でも、それを明示したドキュメントを見つけられず‥。 それにしても、よく作りこまれてるなぁ。 Prelude> signum …

ぷち・ぷろぐらむ

JAVA5.0でGO!! | プログラミングに自信があるやつこい!! 10分でコーディング | プログラミングに自信があるやつこい!! via なんかしらんけど配る - * *scrap* こういうのを Haskell で書くのはヒキョウだと思いつつ、書いてみたい誘惑に勝てません…

Scala は関数型言語ではない

http://enfranchisedmind.com/blog/posts/scala-not-functional/ via http://d.hatena.ne.jp/camlspotter/20090515/1242349686最近、気になっている話題だったので、頑張って読んでみました。 ちょっと煽り気味の文章だし、明らかな間違い(カリー化の話)と…

フィボナッチ数の計算時間を考える

諸般の事情により、相変わらずフィボナッチ数と格闘中です。何人かの方が既に書かれていますが、フィボナッチ数を高速に計算する方法があります。 細かいバリエーションはありますが、以下のような漸化式を利用します。 F2n-1 = Fn-12 + Fn2 F2n = 2Fn-1Fn +…

8800形

連休の総決算。乗った。

ルービックキューブ

連休中、手持無沙汰になることが多かったので、練習してみた。 6面揃えられるようになった。

リスト処理

関数型言語のいいところは、何といっても高階関数と遅延評価だと思うのです。 というわけで、Scala の高階関数(リスト処理)を見てみました。 まずぱっと思ったのが、zipWith と scanLeft が欲しいということ。 zip → map とするよりは zipWith 一発で書き…

Scala の for 構文はただのリスト内包表記じゃないよ

Scala の for 構文(とりあえずこう呼びます)がただのリスト内包表記なら、いちいちモナドとか言わない方がいいんじゃない?とかいうことを昨日書いたのですが、for 構文は Seq 型だけじゃなくて Option 型とか他の「モナドっぽい」型にも使えるよ、という…

Scala の for-comprehension はモナドなの?

JJUG のカンファレンスで、Scala の for は実はモナドで‥‥みたいなことを聞いたので、具体的にどういうことなのか調べてみました。 for-comprehension (for 内包表記?) は↓みたいな構文です。 scala> for (x <- 0 to 5; y <- 0 to 5 if (x+y)%3==0) yield x…