2007-07-01から1ヶ月間の記事一覧

Pythonの5つの嫌われ所

Matzにっき My 5 things I hate about Python (http://www.rubyist.net/~matz/20070719.html#p01) :gnuvince.net My 5 things I hate about Python (http://gnuvince.net/?p=400) いちPythonファンとして思うところを書いてみた。 1. listにdictのget相当(範…

Short Coding本

Short Coding (http://www.amazon.co.jp/exec/obidos/ASIN/4839925232/cozyozy-22/ref=nosim) 言語はCらしいが、非常に興味がある。PythonのShort Coding本を誰か出してくれないかな。

メソッド名一覧の表示(2)

以下を修正。 cls.__bases__で、1つ上の階層のベースクラスしかとれていなかったので、再帰的にベースクラスを探すようにした。 継承階層で同じ名称のメソッドをオーバーライドしていた場合、一番子供側のメソッドを呼び出すようにした。 新型クラスに対して…

メソッド名一覧の表示

どう書く?org メソッド名一覧の表示 (http://ja.doukaku.org/32/) 自分で投稿した関数を少し書き換えたものを掲載。時間計測してEAFPは少し遅いのでやめた。name[:5] == 'test_' は、name.startswith('test_')より速かった。たまたまかな? 以下の特徴を持つ…

RAII

C++

d.y.d 雑感 (http://www.kmonos.net/wlog/75.html#_2341070724) C++には RAII があって、C++で今の自分が書いたコードは絶対解放忘れを起こさないという自信が持てます 私の会社の本社で開発している次世代の大規模アプリはC++で書かれているが、RAIIやPimpl…

関数による簡易的なオブジェクトの作成

Pythonで関数によってクラス風味なモノを作りたい場合、クロージャと関数の名前空間を利用し以下のようにする。 def my_queue(L): L = L[:] idx = [0] def pop(): try: v = L[idx[0]] idx[0] += 1 return v except: return None def add(v): L.append(v) def…

小町算(4)

7月20日の日記のパーサを少し書き直した。以下の点が改善された。 komachi_parser.e()にlistとdequeのどちらでも渡せるようになった。 komachi_parser.e()に渡したリストの値を破壊しない。 インデックスを使うことによりパフォーマンスが少し改善された。 1…

ICFP Programming Contest

k.inabaさんのICFPのメモを見たが、すごすぎる。自分には到底不可能な領域にいる感じ。C++やDなど静的言語に対する自分の熱は冷めたな…。近い内に今の会社で初のC++開発をする機会ができそうだが、苦痛の種になるかも。その内、動的言語が主流になるであろう…

リストを逆順に表示

リスト状のものを逆順に表示するプログラムを書いてください。 解答。 def rprint(L): i = 0 while True: i -= 1 try: yield L[i] except: break for n in rprint([1,2,3,4,5]): print n EAFP(ゴメンナサイはオネガイシマスより楽)を利用して書いた。いつか…

小町算(3)

evalする代わりに自分でパーサを書いた。 # komachi_parser.py # -*- coding: utf-8 -*- def e(L): '+, -を処理' v1 = t(L) while True: if L and (L[0] == '+' or L[0] == '-'): op = L.pop(0) v2 = t(L) if op == '+': val = v1 + v2 elif op == '-': val …

小町算(2)

以下はk.inabaさんの再帰下降で自分でパースしたバージョン。 d.y.d. 小町算 (http://www.kmonos.net/wlog/75.html#_1916070718) すばらしい!後で研究してみるつもり。

小町算

問題2:小町算 (http://karetta.jp/article/blog/ll-spirit/034942) はじめてのにき 小町 (http://shinh.skr.jp/m/?date=20070718#p02) shinhさんのコードを参考に小町算をPythonで実装した。 # shinhさんのコード(Ruby) *a='1' ('2'..'9').map{|x|b=[] a.ma…

Short Codingのまとめ

Cozy Ozyさんが、Short Codingのまとめを公開していた。かなり面白そう。 Short Coding (http://www.4dm.org/ShortCoding/)

キミならどう書く2.0 その2

キミならどう書く2.0 その2の問題が公開されていて、ブログで公開されていたにしおさんの解答はすごいシンプルで分かりやすい。やはり再帰、正規表現はプログラムを短く書くポイントだと思った。 どう書く?orgの税込価格の修正(http://ja.doukaku.org/6/)で…

帰国

今日の昼間、やっと海外旅行から帰ってきて、どう書く?orgで少し遊んでいた。また日記を再開するつもり。

海外旅行

明日から1週間旅行でPC持って行かないのでネットができない。どう書く?orgができないのが残念。あとLL魂のキミならどう書く2.0の油売り算も帰ってきたらやろう。

ジェネレータと再帰

ピラミッドを作る - どう書く?org (http://ja.doukaku.org/8/) ピラミッドを作る問題を考えていて、ジェネレータと再帰を組み合わせる処理を書いていたら、yieldした関数の中で再帰関数を呼び出せなかった。 >>> def pyramid(n): ... def rec(mark=1, space=…

compose関数

1 から 1000 まで続けて書いてできる整数…を Squeak Smalltalk でいろいろと (http://d.hatena.ne.jp/sumim/20070627/p1) 1から15まで続けて書くと123456789101112131415となる。これを1つの整数と考えると、この数は21けたで,…

インデントを整形するプログラム

今使用しているテキストエディタでタブをスペースに変換する方法が分からなかったのでインデントを整形するプログラムを作成した。 使用方法は、python pyformat.py foo.py とする。デフォルトでスペース4つにインデントされる。インデントをスペース2つにし…

投稿エラー

今日、どう書く?orgのお題を投稿したらerror 500が出て投稿できなかった。いくつか解答を投稿したが、なかなか面白く勉強になる。やはりJavaは冗長なのが面白い。Haskellも結構冗長だなあ…。

どう書く?org

にしおさんのどう書く?orgがalpha版として公開されていた。 どう書く?org (http://ja.doukaku.org/) まだ参戦していないが、バイト数や実行速度やメモリ量など定量的なデータで勝敗が自動的に表示されても面白いと思った。但し、実行速度など言語や処理系…