.hs

monoid

id:akihiro4chawon 氏の 比較はモノイド を読んで新しい視点が得られた気がするので忘れないうちに書いておく。 半群とは Wikipedia から引用 演算が閉じている S の各元 a, b に対して、演算結果 a • b は再び S に属する。 結合律 S の各元 a, b, c に対し…

型クラス

.hs

このとき 本当は ArrowChoice*1 での実装も書く予定だったけどまだ理解が足りてなかった。 それで id:nskj77 氏が書かれた Arrow のはなし を読んでいる。 読みながら実際の定義も調べているとどうやら型クラスが理解できていない。 型クラスについて調べて…

Saruman's Army

『プログラミングコンテストチャレンジブック』 から N 個の点が直線上にあります。点 i の位置は Xi です。N 個のうちいくつかの点を選び、それらの点に印を付けます。N 個のすべての点について、距離が R 以内の場所に印を付けられた点がなければなりませ…

Best Cow Line

『プログラミングコンテストチャレンジブック』 から N 文字の文字列 S が与えられ、N 文字の文字列 T を作ります。はじめは T は長さ 0 の文字列で、次のいずれかの操作が行えます。 S の先端を 1 文字削除し、T の末尾に追加する S の末尾を 1 文字削除し…

foldr

.hs

『Real World Haskell』 4章の内容から。 左畳み込みと右畳み込みの違い foldl (+) 0 (1:2:3:[]) == foldl (+) (0 + 1) (2:3:[]) == foldl (+) ((0 + 1) + 2) (3:[]) == foldl (+) (((0 + 1) + 2) + 3) [] == (((0 + 1) + 2) + 3) foldr (+) 0 (1:2:3:[]) ==…

Control.Arrow

.hs

『プログラミングHaskell』の次に『Real World Haskell』を読みはじめた。 でも先に Control.Arrow とか Control.Applicative が何であるかを知りたい。 ありがたいことに日本語のブログが結構あるので読ませてもらって少し分かってきた。 99 questions/Solu…

『自然数対の整列列挙』に挑戦

お題: 2011-04-30 http://d.hatena.ne.jp/route150/20110428/1303994639 似ているのだが f が不定である。id:route150 氏から 遅延評価(主にfoldrとmerge)は相性がいい と教えてもらったのに自力で解いたらこうなった。 import Control.Monad import Data.L…

Catalan number その2

.hs

Haskell で 前回 の処理を実装してみた。 catalan :: Int -> [[Char]] catalan 0 = [[]] catalan n = ['N':c1++'E':c2 | i <- [0..n-1], c1 <- catalan i, c2 <- catalan (n-i-1)] path :: [Char] -> Int -> [[Char]] -> [[Char]] path [] _ (s:ss) = (take …

Hamming number その2

id:akihiro4chawon 氏のエントリの 1つ目の実装を見て Haskell の実装と同じだったので驚いた。 スクリプトで Haskell と同じように書き直してみる。 val hamming: Stream[BigInt] = BigInt(1) #:: merge(merge(hamming map {_ * 2}, hamming map {_ * 3}), …

Hamming number

Hamming numbers - Rosetta Code から 素因数分解した形が 2^i 3^j 5^k になる数をハミング数というらしい。ただし i, j, k >= 0Haskell のコードを引用する。 Haskell hamming = 1 : map (2*) hamming `merge` map (3*) hamming `merge` map (5*) hamming w…

Happy number

Happy numbers - Rosetta Code から Happy number とは次のようなものらしい。 その数の各桁の平方和が 1 になれば Happy ならない場合は再帰して調べる 各桁の平方和が 4 になると循環するので Happy ではない 例) 79 は 49+81=130 -> 1+9+0=10 -> 1 なので…

評価順

.hs

『Jythonプログラミング』の西尾泰和氏のエントリに似ているけど違う話。 最小限Lisp - 西尾泰和のはてなダイアリー 最小限 Haskell あるかな? 『プログラミング Haskell』 10.5 仮想マシン 関数型パーサに比べて検索に Hit しない。 プログラミングHaskell…

List comprehension

Scala の for 式で覆面算を解いているエントリを見つけたので同じように Haskell と Groovy で解きながらリスト内包表記について考える。 リストモナドを使ってみる - みずぴー日記 リスト内包表記は Groovy にもいずれ実装されるのか? http://jira.codehau…

時間帯重複チェック(応用編)その3

お題:時間帯重複チェック(応用編) - No Programming, No Life Haskell で解答されていたのでそれを Groovy で書いてみる。 http://d.hatena.ne.jp/route150/20110401/1301661345 Control.Applicative モジュールの知識がないので読めない部分がある。 ghc…

時間帯重複チェック(応用編)その2

お題:時間帯重複チェック(応用編) - No Programming, No Life をもう一度解く。 フラグ方式には及ばないが計算量を改善した方法に辿り着いた*1。フラグ方式は bucket sort のように限定条件に気づいているので気づいていない方式では太刀打ちできない。ま…

時間帯重複チェック(応用編)

お題:時間帯重複チェック(応用編) - No Programming, No Life を解く。*1 調べてみたら 区間木 - Wikipedia というものがあるみたいだが、手頃な感じではないので Groovy で力づくな方法で解くことにする。 class Time implements Comparable<Time> { int h, m </time>…