2009-06-01から1ヶ月間の記事一覧

Treeから経路への変換

30分プログラム、その613。Treeから経路への変換。例えば、こんな木があったとする。 (define *tree* (make-tree 'foo (make-tree 'bar (make-tree 'baz)) (make-tree 'xyzzy) (make-tree 'baz))) で、これから、根から各末端への経路のリストを求める。例え…

リストのディープコピー

30分プログラム、その613。リストのディープコピーをやってみる。 みんな、Pythonでリストをコピーするには、どうしたらいいか知ってる? map(None,L) って書くんだよ。 mapを使うとこは、すんなり理解できるけど、まさか恒等関数の代わりにNoneを使うとは! …

マインドマップ作成WebAアプリケーション MindMeisterがすごい

マインドマップを作れるWebアプリケーションのMindMeisterがすごい。 ノード間を線で結べる 巷に溢れるマインマップツールは、単にツリーが書けるだけだったりする。 で、そういうのを使うたびに「違うんだよ。それはマインドマップじゃなくて放射思考って言…

Perl 5.10で遊ぼう

30分プログラム、その612。5.10で導入された新機能で遊んでみよう。 ふと、手元のマシンにインストールされてるPerlのバージョンを確認したら5.10でした。 たしか、5.10は、use featureすればsayとかの新機能が使えるはずなので、それで遊んでみよう。 ヘッ…

弾幕の本を買ってしまった

弾幕 最強のシューティングゲームを作る!作者: 松浦健一郎,司ゆき出版社/メーカー: SBクリエイティブ発売日: 2009/03/27メディア: 単行本購入: 7人 クリック: 134回この商品を含むブログ (25件) を見るゲームプロラミングには興味が無いんだけど、つい買って…

円周率を計算しよう

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

述語と比較関数の合成

30分プログラム、その611。Let Over Lambdaにのってた述語と比較関数を合成する関数が、おもしろかったので作ってみよう。 gosh> (sort '(1 2 3 4 5 6 7 8) (predicator-compare even? <)) (2 4 6 8 1 3 5 7) のように使うと、偶数と奇数でグループ分けしつ…

auxをコミットできないようにするスクリプト

30分プログラム、その610。 レポジトリを破壊する簡単な方法しってます? aux.txtというファイルをコミットするだけで、Windowsでそのレポジトリをチェックアウトできなくなるんですよ。 よくは知らないですが、MS-DOSから続く伝統らしいです。誰が得すんだよ…

sortみたいに$aや$bで引数を渡したい

30分プログラム、その609。sortみたいに$aや$bで引数を渡したい。 Perlのsort関数は変った仕様になっていて、引数を$aと$bで受け取ります。 @articles = sort {$a cmp $b} @files; でも普通に定義したら、こんなことできない。 どうやったら、こんなことがで…

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

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

LOLのdefmacro!gをGaucheで

30分プログラム、その607。id:athosに影響されて、Let Over LambdaのマクロをGaucheで書いてみる。今回書くのはdefmacro!gというマクロ。これは、g!で始まるシンボルを自動でgensymにしてくれる。使い方は下に書いてあるのを見てください。 で、このdefmacro…

空気を読んでインデントを設定してくれるky-indent.elをリリースしました

空気を読んでインデントを設定してくれるky-indent.elを書いてみました。 なにするの? インデント設定の違うコードをいじってると、インデントがづれていやーな気分になります。そこで、ky-indentはファイルを開いたとき(あるいはM-x ky-indentとしたとき)に…

循環リストの判定

30分プログラム、その606。循環リストの判定をしてみよう。たしか昔、Common Lispの勉強をしてたときに判定アルゴリズムを読んだ気がする。 おっと、これだこれ。 循環リストのチェックは「うさぎとかめ」のアルゴリズムを使うと簡単です。「うさぎ」と「か…

インデントの設定まとめ

情報が多そうなので、Javaモード(cc-mode)で試す。参考: http://www.jitu.org/~tko/doc-jp/cc-mode.html ソフトタブ(4インデント) 「インデントはスペース4つだぜ」派。たぶん、これがデフォルト設定。 (add-hook 'java-mode-hook (lambda () (setq indent-t…

Pythonのjoinがキモいとか言ってると、多重ディスパッチ派の人がやってきますよ

','.join() がなぜキモイのか - methaneのブログ Pythonの','.join()がキモいと思ってた時代が僕にもありました - by edvakf in hatena この辺を読んだ感想。joinがArrayのメソッドであるべきか、Stringのメソッドであるべきかを議論していると、多重ディス…

多項式の加算

30分プログラム、その605。SICPに乗ってた多項式の加算をやってみよう。 輪講でやってる計算機プログラムの構造と解釈に、多項式の演算を定義してみよう、というのがでてきたのでやってみる。 わりかし大変だったので、変数が1個の多項式だけを対象にして、…

2つのテキスト内の数字を1行ずつ割り算する

30分プログラム、その604。2つのテキスト内の数字を1行ずつ割り算する via http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_169。 わりと単純な問題だとは思うんだけど、出力例がちょっとややこしい。 $ cat a.txt 20 18 0 0 $ cat b.txt 25 20 0 1…

EmacsLisp書いてみた

30分プログラム、その603。EmacsLispでマイナーモードとか書けたらかっこいいなーと思ったので、EmacsLispを始めてみました。 とりあえず練習ということで、スペースを挿入して強調するstrongという関数を書いてみた。 hogehogeという単語にキャレットを重ね…

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

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

名前付きletを試してみよう

30分プログラム、その601。名前付きletを試してみよう。 Let Over Lambdaを読んでたら「Schemeには名前付きletってのがあるんだぜー。うらやましいからマクロで作ろうぜ」と書いてあった。 「へー、そんなのがあるんだ」と思ったので試してみた。マクロの定…

最も0に近い数字を求める、その2

30分プログラム、その600。最も0に近い数字を求める、その2。 id:osiireさんに"doubleの最小値はe-300ぐらいですよ"と言われたので、やりなおしてみる。1と比較しているのが原因だから、"2で割ると0になるような数字"を探せばいいはずだ。 途中で再帰が深す…

最も0に近い数字を求める

30分プログラム、その599。 限りなく小さくするという記事を参考に、最も0に近い数字を求めてみる。元々はFortranのコードらしいですが、ボクはFortranは読めないのでPython版を参考にさせてもらいます。 eps = 1.0 while eps+1.0 > 1.0: eps = eps/2.0 # ep…

OCaml Meeting Tokyo 2009があるらしいよ

Users Meeting - OCaml.jp OCaml Meeting Tokyo 2009 : ATND そこで、日本の OCaml ユーザーの情報交換と親睦を計るために、 OCaml Meeting Tokyo 2009 の開催を提案します。大 学、産業関係者だけでなく、ホビーユーザーも含め、研究から応用事例まで幅の広…

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

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

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

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

今日は第何火曜日?

30分プログラム、その596。今日が第何火曜日かを調べるプログラム。 ウチのCATVターミナルは頭があまり良ろしくなくて、録画予約をするときは「第3火曜日の9:00〜」という指定しかできない。 というわけで、今日が第何火曜日かを調べる関数を書いてみる。あ…

Pythonでflatten(リストを潰す関数)

30分プログラム、その595。Pythonでflatten(リストを潰す関数)を作ってみる。 flattenはRubyにあるメノッドでネストされた配列を平坦にしてくれる。 >> [1,2,[3,4]].flatten => [1, 2, 3, 4] これをPythonでやってみよう。せっかくだから、イテレータを持っ…