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

Rubyのデザインパターン本

いつの間にか邦訳も出ている「Design Patterns in Ruby」(Russ Olsen)を100ページあたりまで読み進めた。「Javaデザインパターン徹底攻略」という本に比べて10倍ぐらい面白い。例が具体的だし、わざとらしくない。なぜそのパターンが必要になるのかという…

Twitterはタイプライター語

QWERTYキーボードの上段のキーだけで、「typewriter」と入力できる。「Twitter」もそう。こうした語を「typewriter word」(タイプライター語)と呼ぶらしい。上段、中段、下段だけで打てる単語はどんなのがあるのかと思って調べてみた。 FILE = "/usr/share…

Javaデザインパターン徹底攻略

「Javaデザインパターン徹底攻略」(日立ソフトウェアエンジニアリング インターネットビジネス部、技術評論社)という本を読んだ。GoFの原典は無用にややこしいという噂を聞いて、とりあえず買った結城氏の本はやたらと重たい上に、記述が冗長っぽくて読む…

Linuxシステムコールプログラミング

c

「Linuxシステムコールプログラミング」(山森丈範、技術評論社)、読了。代表的なUnixのシステムコールについてジャンル別に7章ほどに分けて解説する本。システムコールとはそもそも何かということや、「サンプル以上、実用未満」のサンプルコードを掲載し…

mmapとかbrkとか

c

「Linuxシステムコールプログラミング」(山森丈範著)で、Linuxにbrk/sbrk(2)というシステムコールがあるのを知った。 #include <unistd.h> #include <stdlib.h> #include <string.h> int main() { char *s; if ((s = sbrk(13)) == -1) { perror("sbrk"); return 1; } strcpy(s, "Hello Wo</string.h></stdlib.h></unistd.h>…

termtter用のGyazoプラグインを書いてみた

termtterというコマンドラインで使えるTwitterクライアントはRubyで書かれていて、簡単にプラグインやフック(フィルタ)が書けるというので、Gyazoプラグインを書いてみた。といっても、YAAさんのところにあるGNU/Linux用のGyazoアップローダをテンプレート…

またHaskell基本

Haskellの基本動作あれこれを少し。ループはアキュムレータを再帰で渡して実現。しかし、プライムで別の値を作るのって効率悪くないのかしら。以下の例は10進数の数値を表す文字列を数値に変換する。 import Data.Char asInt :: String -> Int asInt xs = lo…

for文マンセー

朝、出かける前にレクリエーション数学の本をぱらっと見たら、3辺のうちいずれか1本の長さが48となる直角三角形は10個ある、というようなことが書いてあった。詳細は見なかったけど、よほど多いということなんだろうか。Haskellの例題として、これを検証して…

Haskell再び、簡単なところから

Haskellは一旦あっさり諦めようと思ってたけど、結局、オライリーから出ている「Real World Haskll」という本を買ってしまって、また読み始めている。漆塗り勉強法。薄く何度も繰り返し塗る。で、少し読み進めたらまた何か簡単なものなら書けそうな気がして…

幅優先探索的にHakellはしばらくスキップ

何となく雰囲気が分かったから、とりあえず何かを書いてみようと思ってHaskellやってみたけど、1時間×3回でコンパイルエラーの嵐で挫折した。というか、何をどうしていいか、すぐに分からなくなる。英語のスペル辞典からアナグラムを探す例題も破綻。やっぱ…

Haskellでfizzbuzz

動いて妙にうれしい。 main = putStrLn $ unwords $ map fizzbuzz [1..100] fizzbuzz :: Integer -> String fizzbuzz n | divides 3 && divides 5 = "fizzbuzz" | divides 3 = "fizz" | divides 5 = "buzz" | otherwise = show n where divides p = mod n p …

ふつうのHaskell本読了

「ふつうのHaskellプログラミング」(青木峰郎著)を一通り読んだ。関数、型クラスあたりの話が非常におもしろい。Haskellの関数って引数が2つ以上あるように見えても、それは実は引数を1つ取って関数を返す高階関数なんだという話とか、関数定義のところで…

Haskellを少しやってみる

何となくHaskellを少しやってみようかと思った。「ふつうのHaskellプログラミング」(青木峰郎著)を頭から3分の1ほど読んだ。ビックリするぐらいRubyと似てる。モナドとか言わなければ、あまり違和感がないかも。リストを切り刻む関数のhead、tailはLispのc…

プライム、プライム、プライム

数万語あるスペル辞書から「amble、blame、mabel、mable」のようなアナグラムになっている単語を拾い出すというプログラムをHaskellでもやってみようと頑張ってみた。前にRubyで書いていたし、比較的簡単にかけそうな気がしたのだけど、コンパイルエラーが出…

この木なんの木

理系関連のトピックに関して、Wikipediaには初学者向けに優れた記述が多いように感じているけど、その中でも特にコンピュータサイエンスに関しては英語、日本語ともにコンパクトで読みやすい解説が多いように思う。Wikipediaで木構造について色々と読み漁っ…

Rubyでバイナリ・ヒープを書いてみた

各ノードの子が常に親より大きくなる(あるいは小さくなる)バイナリ・ヒープを作ってみた。ヒープはソートに使われるほかにも、順序付きキュー(pre-ordered queue)など結構重要な応用があるらしい。順序のあるキューを配列で実現する場合、3つのアプロー…

ヒープのsiftdownリファクタリング

MyHeapのsiftdownでコードの重複と分岐の分かりづらさが気になったので書き換えてみた。 def siftdown(n) if n * 2 > @n then return elsif n * 2 == @n then if @q[n] > @q[n * 2] then @q[n], @q[n * 2] = @q[n * 2], @q[n] end elsif n * 2 + 1 <= @n the…

動的計画法で部屋の割り当て

「Rubyによる情報科学入門」(久野靖著)にあった動的計画法をやってみた。またしてもコードがRubyらしくない気がしたので、書き換えてみた。動的計画法は、ある条件を満たす解を見つけるのに、その解だけを求めるのじゃなくて、初期状態から順次計算してい…

アルゴリズムの理解と実装って結構別かも

「珠玉のプログラミング」を何章か続けて読んだ。前半1/3ぐらい読み終わったところで、あれ、この本てプログラマとしての正しい心構えや日々の良い行いについて具体例を示しつつ解説する本だったのかな、と、よく分からなくなってきた。別にそんなのどうでも…

ペナントパズルをRubyで解く

箱入り娘とほぼ同類のスライドパズルとして、ペナントパズルというものがあるらしいとWikipediaで知った。左上の2x2のピースを右下にまで持ってくるというもので、箱入り娘の解法のために作ったRubyスクリプトの初期条件とゴール判定の位置だけを変えてやっ…

箱入り娘パズルをRubyで解く

「Rubyによる情報科学入門」(久野靖著)の第10章にあった箱入り娘パズルをやってみた。スライドパズルの一種。掲載されているコードをそのまま打ち込むのも芸がないし、例によって、久野先生のコードが、どうもCっぽく見えることもあって、自分で書き直して…

イテレータでFizzBuzz

FizzBuzzを書くのに、オープンクラスで書き換えるべきなのはFixnum#to_sじゃなくて、Range#eachじゃないかと思ってやってみた。 class Range def fizzer self.each do |n| f = (n % 3) == 0 ? "Fizz" : "" f += (n % 5) == 0 ? "Buzz" : "" f = n if f.empty…

FizzBuzzへの道

もうすでに2回ぐらい過去にやってるけど、ブログでFizzBuzzを書くといいらしいと聞いた。 class Fizzer def initialize(fz) @l = [] fz.sort{|a, b| b[1] <=> a[1] }.each do |key, val| @l << lambda {|x| (x % val) == 0 ? key.to_s : x} end end def repl…

約6万語を含む英語のスペル辞書からアナグラムを探す

約6万語を含む英語のスペル辞書を使って、アナグラムとなっている単語をリストアップする。「珠玉のプログラミング」にある手法で、ソートした文字列で比較せよっていう話。それだけの話だから、すぐに試せるとか思ってやってみたけど、実際にやってみると結…

C++の絵本を読んだ

「C++の絵本---C++が好きになる9つの扉」(アンク著、翔泳社)を読んだ。継承のところで、子クラスの参照を親クラスのポインタに代入してなんたらかんたらすると、どうたらなんだけど、こうたらするとどうたら、というあたりとか、ややこしそう。まあC++って…

珠玉の電話番号ソート

珠玉のプログラミングを頭から読み始めた。10個ちょっとあるエッセイの1つめ、1000万件ほどある電話番号をどうやって短時間でソートするかという話で、いきなりしびれた。残りのエッセイも期待できるかも。

リフレクションてすごい

『プログラミング言語Ruby』で未読だった後半を読んだ。クラス、モジュールあたりの説明で、諸々かなりスッキリした。言語キーワードに見えた「attr_accessor :hoge」のようなやつらが、実はClassクラスにミックスインされているModuleクラスのプライベート…

プロジェクトオイラー

また、Project Eulerの問題をぽつぽつ解いてみた。そこそこやる気になるし、いい練習だしでいいんだけど、一部の問題は、「これってRubyを使うのは反則じゃないか」という感じ。Ruby1.9+mathnライブラリを使ってしまうと、最初のほうの問題はかなりトリビア…

Rubyで有限オートマトン

「Rubyによる情報科学入門」(久野靖)に、与えられた文字列がある規則に当てはまるかどうかを判定するという課題を例にした有限オートマトンの使い方というのがある。正規表現ぽい。演習をやってみた。ちょっと元のコードが好みと違ったので、クラスを使っ…

久しぶりにelisp

はてダでソースコードのハイライト表示をするためのタグを入れやすくするEmacs Lispを書いた。 ;;; はてなのコードタグを入力 (defun ht-code (beg end) (interactive "r") (let* ((lang-alist '(("ruby") ("c") ("lisp"))) (lang (completing-read "languag…