2006-09-01から1ヶ月間の記事一覧

今日の書籍

今日久しぶりに書店に行って本を見てきた。MYCOMから出ている「入門Common Lisp〜関数型4つの特徴とλ計算」という本が気になった。薄いが価格も安いので購入をかなり迷ったが、SchemeならまだしもLispはあまり興味ないので止めておいた。その代わり「初めて…

ジェネレータ

Pythonでジェネレータを作成するには次の2通りがある。 >>> (i for i in xrange(3)) <generator object at 0x00B34F08> >>> def gen(): ... yield 0 ... yield 1 ... yield 2 ... >>> gen() <generator object at 0x00BE2EB8>つまり、リスト内包表記風(呼び方が分からない)の書き方と、関数の定義風の書き方の2通りあり、前</generator></generator>…

OCPなコードにする方法

今日、とあるページでOpen-Closedなコードを作成するには、継承と委譲を使うと書いてあった。今まで抽象クラスやダックタイピングを利用したポリモルフィズムしか頭になかったが、デリゲート(タイプセーフな関数ポインタ?)を利用しても実現できることに気が…

Suffix Arrayアルゴリズム

今日、とあるページでSuffix Arrayという文字列検索用のアルゴリズムの存在を知った。例えば、'abracadabra'という文字列があったとして、'abracadabra', 'bracadabra', 'racadabra', ...というように1文字ずつずらした配列を作成し、ソートして検索用のテ…

オブジェクトの同一性と同値性、例外処理

オブジェクトの同一と同値を判定するには以下のようにする。 >>> a = ('a', 1) >>> b = ('a', 1) >>> a == b # 同値性のチェック True >>> a is b # 同一性のチェック False例外には文字列例外とクラス例外の2つがあるが、発生した例外と、exceptブロックに…

言語は書いてみないと覚えない

当たり前の話だが、プログラミング言語の勉強は本を読むだけでは身につかない。自分がJavaを勉強していたときがそうで、本はたくさん読んだのだがほとんど実装してなかったので、身についたつもりにしかなっていなかった。思えば、C++も本をたくさん読んだ割…

importとfrom

モジュールのインポートで、importとfromではどうやら挙動が違うらしい。fromの方は属性がコピーされるらしい。つまり、fromでインポートした属性を書き換えても元のモジュールの属性(変数)の値などは書き換わらないらしい。モジュールは結構ややこしい。さ…

最近の興味

最近Google Code Jamに参加して以来、言語的な興味よりもアルゴリズムに興味を持つようになった。時間も限られていることだし言語の勉強は、Python、C#、Haskellに絞ろうと思う。本当はSICP(魔術師本)を読みたいので「The Little Schemer」あたりでSchemeも…

ユーザ定義クラスの既存アルゴリズムへの適用2

今日先輩から教えてもらい6月9日の自分の日記の問題に対するうまいやり方が分かった。以下の通り。 class A: def __init__(self, id, val): self.id = id self.val = val def __repr__(self): return 'A(%d, %d)' % (self.id, self.val) as = [A(1, 1), A(2,…

文字列の変更

>>> a = 'abcde' >>> a = list(a) >>> a[1] = 'B' >>> a = ''.join(a) >>> a 'aBcde'文字列はイミュータブル(変更不能)なオブジェクトなので、一度リストなどに変更しないと変更できない。もしくは、正規表現などで変更して再代入するなどしても良いが、直感…

世界の中心で、Pyをさけぶ

最近、コンピュータ業界の世界の中心(アメリカ)で、Pythonが大ブレイク中という感じがしている。それもこれも某MSや某Googleなどの企業のアピールが回りの業界にも影響を与えていると思う。私の所属する某業界の某世界標準ソフトのカスタマイズ言語としてもP…

Pythonの変わった言語仕様に関してメモ

ブール演算 and, orを使用すると、整数の1, 0(True, False)ではなく、オペランドのオブジェクトが戻されて、True, Falseが表現される。 >>> 2 < 3, 3 < 2 (1, 0) >>> 2 or 3, 3 or 2 (2, 3) >>> [] or 3 3 >>> [] or {} {} whileとforにelseが使える >>> seq…

750点問題

今回自分がassignされた750点問題は、正方形の盤にチェスのBishopを指定された個数だけぶつからないように配置する方法は何通りかを検索するという問題だったが、かなり難しかった。ネットで色々調べてみると8クイーンズという有名な問題の応用であり、8クイ…

Qualification Round

制限時間1時間で、250点問題と750点問題の2問が出題され、250点問題は見ずに750点問題に絞りチャレンジ。結局時間切れで0点。System Test終了後、他の人の回答を見たところ、750点問題ができている人はほとんどいない。250点問題からやっていれば通ってい…

Pyrex

今日先輩から、Pyrexなるものを教えてもらった。Pythonライクな言語でCのコードを生成してくれるツールらしい。SWIGよりもよさげということで、少々勉強してみるつもり。 上位のライブラリ的な処理をPyrexの言語で書いておいて、Cに落としてPythonから呼び出…

Google Code Jam 2006

Google Code Jam 2006に参加することにした。とりあえず練習問題の500点問題をsubmitできたが、150点だった。どうも回答時間が大いに関係しているらしい。250点問題は問題の意味すら分からなかった。 他の人の回答も見れるので色々勉強になる。文字列のタプ…

オブジェクト指向とモジュール化

OO(オブジェクト指向)は、モジュール化の考え方をもっと徹底させたものと言えるかもしれないが、OOで最も大切なのが、モジュール間の依存関係を複雑にしないということだ。いや、もっと言えば、「OOで」ではなくて、「プログラミング一般で」である。 ある意…