Erlang

buffalo

30分プログラム、その799。anarchy golf - Buffaloにインスパイアされました。 "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"という文法的に正しい英文を出力するプログラムです。 使い方 16> buffalo:main(). "Buffalo buffalo Buffa…

ブロックソートによる符号化

30分プログラム、その793。anarchy golf - BWTにインスパイアされて、ブロックソートによる符号化にチャレンジしてみました。 復号は明日やります。 使い方 1> bwt:bwt("cacao"). {3,"ccoaa"} ソースコード -module(bwt). -compile([export_all]). shift(N, …

文字列の入れ替え

30分プログラム、その785。anarchy golf - permutaterにインスパイアされました。 文字列に対してpermutationを適用します。 使い方 1> permutater:permutater("hoge"). ["hoge","hoeg","hgoe","hgeo","heog","hego","ohge","oheg", "oghe","ogeh","oehg","o…

文字を全部0に置き換える

30分プログラム、その778。anarchy golf - zero linesにインスパイアされました。 改行を除く全ての文字を0に置き換えます。sedでいいじゃん、とか言わないで> 使い方 $ jot 10 | escript all_zero.erl 0 0 0 0 0 0 0 0 0 00 $ python -m this | escript all…

集合モジュール

30分プログラム、その772。 なんとはなしに集合モジュールを書いてみました。 使い方 1> mySets:add(1,[1,2]). [1,2] 2> mySets:add(1,[2]). [1,2] 3> mySets:union([1,2],[1,3]). [2,1,3] 4> mySets:intersect([1,2,3],[1,4]). [1] 5> mySets:diff([1,2,3],…

暗証番号ジェネレータ

30分プログラム、その760。暗証番号ジェネレータ。 最近、暗証番号を設定する機会が何度かありました。とはいうのもの、ランダムな4桁の数字なんで、そう簡単には思いつけないです。 というわけで暗証番号ジェネレータを作ってみました。 破られやすさとかの…

PracticalNumberの判定

30分プログラム、その751。Practical number - Wikipediaの判定をやってみました。 Practical Numberは定義がややこしいんですが、 NがPractical Numberとは: N未満の数; 1,2,3,...,N-1が Nの約数の和で表現することができる ということらしいです。詳しくは…

リストから二次元配列への変換

30分プログラム、その744。リストから二次元配列への変換を書いてみた。 Erlangで画像処理がやりたいので、Bitmapを書き出してみよう - みずぴー日記を書いてみた でもバイナリとして読み出すので、特定の座標にアクセスするのが大変 バイナリからRGBのタプ…

並列マージソート

30分プログラム、その738。並列版のマージソートを書いてみました。 積読置き場からマルチコアCPUのための並列プログラミングが発掘されたので、そこにのっていた並列マージソートのアルゴリズムを実装してみました。 分割するたびにスレッドを生成する ただ…

画像のグレイスケール化

30分プログラム、その723。Bitmapを書き出してみよう - みずぴー日記で作ったビットマップ読み書きモジュールを使って、画像のグレイスケール化をやってみた。 左のカラフルなハワイの画像をグレースケール化すると、右のようなグレイスケール画像になる。 …

SHA1の解析(逆計算)

30分プログラム、その716。とある事情でSHA1の解析(逆計算)をしなければならなくなりました。就活をしてるわけではないんですけど、まあ流れというやつです。 で、全組合せに対してSHA1を計算して、それが目的のものと一致するかどうかを調べるというブルー…

Bitmapを書き出してみよう

30分プログラム、その711。Bitmapを読んでみよう - みずぴー日記に書き出し機能をつけてみました。 これで、画像処理で遊べるぜ。 readがBinary -> Bitmapなので、writeはBitmap -> Binaryにしたほうが美しいけれども、オフセットの調節などが難しかったので…

n文字の文字列を全部出力するコマンド

30分プログラム、その709。n文字の文字列を全部出力するコマンドを作ってみました。ふと、2文字のTwitterIDが空いていないか調べてみたくなりました。で、そのための準備として、aa、ab、...、zzという文字列を生成するコマンドを作りました。あとは、これを…

Bitmapを読んでみよう

30分プログラム、その702。Bitmapを読んでみよう。 Erlangにはバイナリ構文なる便利なやつがあるので、それを使ってビットマップの読み込みをできるようにしてみよう。Erlangで画像処理、とかもおもしろそうだし。とりあえず、今回は読み込みのみ。そのうち…

Erlangでechoサーバ

30分プログラム、その693。Erlangでechoサーバを作ってみた。 なにかいいネタないかなぁ、と思いつつプログラミングErlangを開いたら、ちょうどgen_tcpを解説したページだったので、Erlangでechoサーバを作ってみました。脈絡ないとか言わないで。 使い方 $ …

ディレクトリ・トラバース用ユーティリティ

30分プログラム、その685。ディレクトリ・トラバース用ユーティリティ。指定したディクトリから、条件を満したファイルを探しだすコマンドを書くための、ユーティリティ関数を作りました。 loop()-> receive {T,Path} -> io:format("~p - ~p~n",[T, Path]), …

複利計算、再び

30分プログラム、その678。昔やった複利計算 - みずぴー日記をリメイクしてみました。再帰をやめて、scanlを使っているあたりに成長を感じていただければ幸いです。あ、でもうまくファイル入力ができなかったです。ダメダメですね。 使い方 1> compound:each…

並列ダウンローダっぽい何か

30分プログラム、その672。サーバごとにスレッドを立ち上げて、並列でダウンロードするダウンローダを目指してみた。実際は、スレッドを立ち上げるとこまでしかやっていない。 Webからファイルをダウンロードするときは、なるべく並列化して効率をあげたい。…

ErlangでファイルのMD5計算

30分プログラム、その664。ErlangでファイルのMD5計算をやってみました。 本当は、md5ベースで重複ファイルの削除をするぜ、みたいなことをやりたかったんです。でも、特定ファイルのmd5を計算するだけで時間が立ってしまいました。特にio_lib:formatに渡す…

「ダイスを 30 個同時に振って、すべて 1 の目が出たら負け」をやろうとして失敗した

30分プログラム、その598。「ダイスを 30 個同時に振って、すべて 1 の目が出たら負け」をやろうとして失敗した。これだと確実に死にます。 今日はErlangでやろう Erlangだからプロセスを鬼のように作りたいな。そうだダイスをプロセスで表現しよう! 乱数は…

よく使う単語 TOP100を取り出してみる

30分プログラム、その594。よく使う単語 TOP100を取り出してみる。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_067にインスパアされました。元のやつではmanページについて調べているけど、gz圧縮を展開するのが面倒だったので手元にあったソー…

"METHINKS IT IS A WEASEL"をやってみる

30分プログラム、その589。エロと風俗情報満載 どう抜く?をやってみる。 ランダムな文字からMETHINKS IT IS A WEASELを作るプログラムを作れ。 簡単に流れを書いてみます。 ランダムな20文字を持つ文字列をもった300個作ります。 その文字列が"METHINK…

ランダムなテキストの生成

30分プログラム、その588。エロと風俗情報満載 どう抜く?のためにランダムなテキストを生成してみる。 エロと風俗情報満載 どう抜く?がおもしろそうだったけど、30分で全部やるのは厳しい。 というわけで、最初の「ランダムな20文字を持つ文字列」を作って…

Erlangでブロードキャスト

30分プログラム、その582。Erlangでブロードキャスト。ふと、Erlangのメッセージ送信って一個のプロセスしか送れないから、複数のプロセスにメッセージを送るライブラリがあってもいいかな、と思ったので書いてみた。ふと、思っただけなので、特に意味も実用…

トラックバックが送れない

30分プログラム、その575。トラックバックの送信をやろうとして失敗した。 http://www.movabletype.org/docs/mttrackback.htmlによると、トラックバック専用のURLにPOSTリクエストを投げればいいらしい。 POST http://www.example.com/trackback/5 Content-T…

Erlangでpublic_timelineを取得

30分プログラム、その570。Erlangでpublic_timelineを取得してみる。 前にHTTPでGETとXML解析をやったので、それを組合せてTwitterのpublic_timelineを取得してみた。 あとはBASIC認証さえできれば、立派なTwitterライブラリになると思う。 使い方 % public_…

分散Grepっぽい何か

30分プログラム、その563。分散Grepっぽい何かを作ってみよう。 MapReduceといえばwcだけどgrepもおもしろいんじゃないかな、と思ったので作ってみた。 正直なところシングルCPUなボクのマシンでは、速くなっているのかどうかよく分からない。なんとなくIO処…

Grepっぽい何か

30分プログラム、その559。Grepっぽい何かを作ってみよう。 MapReduceといえばwcだけどgrepもおもしろいんじゃないかな、と思ったので、とりあえず直列なやつを作ってみた。 とりあえず正規表現の使い方が分っただけで満足です。 使い方 1> grep:start("Io",…

Erlangが末尾再帰最適化をしてるか調べようとした

30分プログラム、その547。Erlangが末尾再帰最適化をしてるか調べようとして、挫折した。 fact(0) -> 1; fact(N) -> N * fact(N-1). という由緒正しい再帰のコードが、全然スタックオーバーフローしないんだもん。fact(65536)にも耐えるとは・・・。 という…

二桁の西暦のソート

30分プログラム、その542。二桁の西暦のソートをやってみる。 元ネタはhttp://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_105だけど、先頭二桁とかはややこしいので考えず、単純に整数だけのソートにしてみた。 使い方 1> year_sort:sort([07,06,05,0…