Haskell

文字列の先頭と末尾にあるスペースの削除

30分プログラム、その614。文字列の先頭と末尾にあるスペースの削除 via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_174。元のやつでは、正規表現による文字列置換をしてるけど、ここではdropWhileを使ってみた。別に正規表現が嫌いという分け…

円周率を計算しよう

30分プログラム、その611。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_111にインスパイアされたので、円周率を計算してみよう。 元の記事と同様にwikipedia:ガウス=ルジャンドルのアルゴリズムを使うのだけれども、このアルゴリズムはパラメ…

ファイル名を10文字にする関数(重複があっても大丈夫)

30分プログラム、その608。ファイル名を一括して先頭10文字に短くするバッチ - バッチもん研究所 blogやhttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_172にインスパイアされて、ファイル名を10文字にする関数を書いてみる。 元のスクリプトでは…

何時ごろにファイルを編集することが多い?

30分プログラム、その602。何時ごろにファイルを編集することが多いかを調べてみよう。 Twitterの発言を分析するツールだと、何時ごろの発言が多いかを表示してくれる。すると、いつも何時ごろかヒマか分かっておもしろかったりする。 というわけで、それを…

snocリストを作ってみよう。

30分プログラム、その597。snocリストを作ってみよう。普通、リストは data List a = Cons a (List a) | Nil と定義するところを逆に data List a = Snoc (List a) a | Nil と定義したsnoc listというものがあるらしいです。普通のリストと逆なので、末尾へ…

HaskellのIntegerがどのへんでオーバーフローするか調べようとしたら、オーバーフローしなかったでござる

30分プログラム、その593。HaskellのIntegerがどのへんでオーバーフローするか調べてみよう。HaskellのIntegerはメモリの許す限り任意の桁数が扱えるらしいです。いわゆる、BigNumとかBigIntとか呼ばれてるやつです。 とは言うものの、メモリがいっぱいにな…

急勾配の判定

30分プログラム、その587。急勾配の判定をやってみる。 有限の長さの数列で,各要素の値が,その要素の後ろにある残りの列に含まれるすべての要素の和よりも大きい列を「急勾配の列」ということにします(空列の和は0とします).任意の長さ(ただし有限の長…

対数ステップでフィボナッチ数を計算する

30分プログラム、その581。対数ステップでフィボナッチ数を計算できるらしいので、やってみる。 SICPの演習問題で担当になったところに、フィボナッチ数を対数ステップで計算するアルゴリズムが載っていたので試してみた。とりあえず、配布資料を貼って置き…

ハンミング数に挑戦して失敗した

30分プログラム、その574。エロと風俗情報満載 どう抜く?にチャレンジしたけど、失敗した。 2^i * 3^j * 5^k の形で表される整数を小さい方から順に 100 個列挙するプログラムを書いてください。 i, j, k は 0 以上の整数です。アルゴリズムのオーダーにつ…

素数の二進数表記

30分プログラム、その569。前回は二進数表記までしかやらなかったが、今回は素数を二進数表記するところまでやってみる。 素数を計算するのが面倒で二進数表記への変換だけでお茶を濁していたら、GaucheやらAwkで素数計算までやられてしまった。 このままだ…

二進数表記に変換してみる

30分プログラム、その568。整数を'+'と' 'の二進数表記に変換してみる。 素数の二進法表記 - 西尾泰和のはてなダイアリーに + + + + + + + +というよく分からない記号が書いてあった。 最初はさっぱり意味が分からなかったけど、よくよく考えていみると、立…

QuickCheckでリファクタリング

30分プログラム、その562。QuickCheckでリファクタリング。 ちょっと前に、Haskell使いのid:zyxwvが「QuickCheckはリファクタリングに使うといいと思うんだ。リファクタリング前と後の関数の挙動同じかチェックできるから」と言っていたことを唐突に思い出し…

おかしなソート関数を実装してみよう

30分プログラム、その558。おかしなソート関数を実装してみよう。 訊くところによると、PHPの比較演算子は推移律が成り立ってないらしい。おそろしい話ですね。 これをあえて、Haskellでもやってみよう。きっと、Ordクラスを実装すればできるだろう。 使い方…

マルチンゲール戦略を試してみる

30分プログラム、その553。資金管理(ピラミッド法) - komamitsu.logがおもしろかったので、ボクも試してみた。 ボクが試した戦略は、マルチンゲール戦略というやつで 1万円掛ける 勝ったら、やめる 負けたら、掛金を倍にして、再チェレンジ というもので、(…

ベンチマークのための時間計測関数

30分プログラム、その541。ベンチマークのための時間計測関数を書いてみた。 http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_102にあるようにビルトインの関数とオレ関数の速度を比較しようと思ったけれど、そのための時間測定のほうが面倒くさい…

「ログイン・ログアウトの解析」のパーサ部分

30分プログラム、その535。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_022をやってみよう。 が、残念ながら30分では終わりそうにないので、今日はパーサ部分だけにチャレンジ。リスト操作とパターンマッチを駆使すればできそうな気がするけど…

過去一時間で一番よく使ったコマンドは?

30分プログラム、その532。昨日のやつのリベンジ。 過去一時間で使ったコマンドの数を数えてみる。zshの場合、 $ history -i 1 | runghc freqCmd.hs fc 18 history 8 cd 3 git 1 google 1 irssi 1 man 1のようにしてやればいい。-iでYYYY/MM/DDl形式で時刻を…

過去一時間で一番使ったコマンドは?(失敗)

30分プログラム、その531。過去一時間で一番使ったコマンドを数えてみよとして失敗した。 よく考えたら、過去一時間ってことは現在時刻から一時間を引かないといけなんだよね。先頭と同じ時刻のやつだけとってもダメなんだよね。 22:20 ls 22:40 git 23:00 e…

ランダムソート(笑)をHaskellで

30分プログラム、その527。ランダムソート(笑)をHaskellでやってみた。 なんかおもろそうだな、と気楽に始めたら意外と難しかった。 Haskellで乱数といえば、Stateモナドだよな Stateがいるから、Data.Listのsortが使えない -> sortの再実装 比較関数がState…

Arrowを使って、lengthを書こう

30分プログラム、その522。Arrowを使って、lengthを書いてみた。 最初、Arrowでリストってどうやって処理すればいいんだ、と頭をかかえたけど、Arrow の do 記法 - zyxwvの日記を見たら、 listcase [] = Left () listcase (x:xs) = Right (x,xs) という関数…

Arrow.hsを読もう〜その2〜

Arrow.hsを読もう〜その1〜 - みずぴー日記の続き。Arrow.hsを読もう、30分で読める範囲だけ。 ArrowApply instance ArrowApply (->) where app (f,x) = f x 単なる適用。(->)以外だと嬉しいんだろう、たぶん。 leftApp -- | Any instance of 'ArrowApply' c…

Arrow.hsを読もう〜その1〜

Arrow.hsを読もう、30分で読める範囲だけ。 ホントは30分でArrowを使って30分で何か作ろう、ってのがやりたいんだけど、まだプログラムが書けるほど理解していない。 しょうがないからコードリーディングをしよう。 どこにあるの? http://darcs.haskell.org/…

ファンクション倶楽部のスライドを読んだ

昨日、@takkanmさんに教えてもらったファンクション倶楽部での発表を読みました。 何が分からないから分からないレベルから、何が分からないかが分かる程度にはレベルアップした気がする。 読んだやつ 発表動画 発表スライド あとArrow.hsも適宜参照した。 A…

Arrowを勉強しよう

30分プログラム、その520。HaskellのArrowを勉強しよう。 30分ほど、日本語で解説してるブログを見てみた。 とりあえず、今のところ分ったのは、 Unixのパイプのように関数をつなげれる IO処理がポイントフリースタイルで書ける do記法でも書けるらしい とい…

Data.IORefを使ってみよう

30分プログラム、その513。Haskellでmutableな変数が使えると評判のData.IORefを使ってみた。 で、いざ書き換え可能な変数があるとなると、なかなかいいサンプルが思いつかない。しょうがないので、フィボナッチ数で関数が何回呼び出されるかカウントするや…

ghcでPEGを使おう

30分プログラム、その508。 インストール Darcsでレポジトリからもってくる。 $ darcs get http://repetae.net/repos/frisby Cabalを使ってインストール。 $ cd frisby/frisby $ runghc Setup.lhs configure $ runghc Setup.lhs build # runghc Setup.lhs in…

ghcでPEGを使おう(インストールの準備)

30分プログラム、その507。 へー、PEGってのがあるのか。おもしろそうだなー オリジナルはHaskellのfrisbyなのか。とりあえずそれを使ってみよう アーカイブがないじゃないか!しょうがない、Darcsのレポジトリからとってくるか Darcsのインストール(←いまこ…

算数にチャレンジ

30分プログラム、その437。算数にチャレンジしてみた - こげこげ堂はてな支舗より。 1〜512の数の書かれたカードが1枚ずつ、左から小さい順に、「1,2,3,4,・・・,511,512」と並んでいます。いま、次のような作業を行うことにします。ア…

行末の空白を自動で削除

30分プログラム、その431。行末の空白を削除するプログラム。 今流行の.emacs & .vimrc - グニャラくんのグニャグニャ備忘録@はてなを設定したら、行末の空白が気になりだしたので、一括して削除するためにプログラムを作ってみた。ホントは、elispでやるべ…

ならしコストによるQueue

30分プログラム、その425。HaskellでQueueを作ってみた。関数型言語でキューといえばamortizedなキューだと思ったので、そちらで。ところで、ボクが最初に読んだ本(コンピュータプログラミングの概念・技法・モデル (IT Architects' Archiveクラシックモダン…