2010-12-01から1ヶ月間の記事一覧
よくあるクイズ。計算機の力を使わずに解きたくない。 [{'expr': ((4, '*', 4), '/', (4, '+', 4)), 'ans': 2}, {'expr': ((4, '/', 4), '+', (4, '/', 4)), 'ans': 2}, {'expr': (4, '-', ((4, '+', 4), '/', 4)), 'ans': 2}, {'expr': (4, '/', ((4, '+', …
import itertools def is_ok(ns): for i, x in zip(range(1, 9), (2, 3, 5, 7, 11, 13, 17)): if not ((100*ns[i]+10*ns[i+1]+ns[i+2]) % x == 0): return False return True cnt = 0 for ns in itertools.permutations(range(10), 10): if is_ok(ns): cnt +…
アルファベットを数字に対応させた際の単語の和が三角数になるものの数を数える問題。 まだ、どのように書けば十分なのかというのが把握できていない。これはクラスにした方が良かったかもしれない。 def _str_to_val(offset): def _calc(s): n = 0 for c in…
ちょっと癖のあるnode.js上のlisp->jsトランスレータ http://sibilantjs.info/#welcomecombinationsとか作ってみた。 (puts '(1 2 3 4)) (puts (append-map '(1 2 3 4) (lambda (x) (list x (* x x))))) (puts (combinations (list 1 2 3 4) 2)) result sibi…
長さが4の場合。 N = 1000a + 100b + 10c + d 3x = a + b + c + d の時 d = 3x - a - b -c 整理すると N = 999a + 99b + 9c + 3x # N is not prime後は、各数字の和を調べて、7桁が最大ということが分かる。組み合わせを作って総当たり。 いやー、combinatio…
前書き(飛ばし読み推奨) 最近、ようやく、pythonで小さなコードを書くようになってきた。そして少し考え方が変わってきた。以前は、repl*1との連携を重要視してきたのだけれど、日常的なコードを書くのなら、もっと手軽な環境で十分なような気がしている。re…
汚いな。 L = [9*(i+1)*10**i for i in xrange(10)] def nth(n): n = n-1 def idx_and_rest(n): for i, e in enumerate(L): n -= e if n < 0: return (i, e+n) i, rest = idx_and_rest(n) for j in xrange(10**i, 10**(i+1)): size = len(str(j)) if size > …
まだ、python慣れないな。最大だから、本当はリストで持つ意味ないし、もっと効率よく求められそうだけれど。 # If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exactly three solutions for p = 120. # …
toggle-file 現在のバッファのファイル名に対応付けられた名前のファイルを開くためのMinor-mode。 例えば、memo.txtに清書。memo.tmp.txtに下書きというようにして、清書と下書きの間を行ったり来たりできます。 foo.txt <-toggle-> foo.tmp.txt ;;(default…
nodejsって? 省略 install aptで入るのですが、何やら古いのか、設定が異なるのかtutorialすらまともに動かなかったので自分でビルドすることにしました。 N=3 sudo apt-get build-dep nodejs #ビルドに必要なパッケージを集める wget http://nodejs.org/di…
(昨日はwindowsなのに今回はunixの話です) sphinxをemacs上で使う際にしておいた方が良さそうだと感じた設定のめもだいたい以下のような内容が含まれてます。 全角空白がウザい "make html"を手軽に 出来上がったhtmlを手軽に閲覧 指定した箇所に空白3つ前置…
sphinxについて sphinx用のエディタに必要な機能 UTF-8で保存する機能 できればデフォルトのエンコーディングを指定できると良い。 タブ機能 きっといっぱいファイルを開くので Meryのインストール Meryを普通にインストールした後に、デフォルトのエンコー…
elispを読んでいるときに、whileがある箇所に辿り着くと頭が「うー」ってなります。何か読み辛いんですよ。 単純なループだったらdolist 構造的なループだったらloopマクロ を使って欲しいななんて思ったりします。loopマクロと言っても、全部の機能を使う必…
まちがい 概要 easy_installなどで入ったコマンドの在り処を調べる。 % pywhich sphinx-build #/usr/local/lib/python2.6/dist-packages/sphinx.py 動機 easy_installやpipで入ったコマンドが、どこで定義されたものなのかわからない。 % cat `which sphinx-…
gitで管理しているプロジェクト内のファイルを移動するanything。 全部、毎回更新しているので重たいかもしれません。git rev-parseでプロジェクトのルートを取るのが何かうまくいかなかったのでelispで.gitを探すようにしました。 inspired http://d.hatena…
(define (generator$ iterator$) (let ((cont-storage #f)) (define (make-next cont) (lambda () (let/cc return (step cont return)))) (define (step cont return) (set! cont-storage (lambda (x cont*) (return x (make-next cont*)))) (cont)) (make-n…
http://programmingpraxis.com/2010/12/14/longest-duplicated-substring/ だいぶpythonの書き方が分かってきた。きれいに書こうとしない方が逆に綺麗になる。python。 どこからでも値が変えられるというのは、やっぱり副作用も便利だなと思ったり。
paver 依存関係を調査しないrubyのrakeのようなもの。Rakefileにあたるファイルはpavement.py。以下のように書く。 from paver.easy import * @task def hello(options): print "hello" @task def list_tasks(): task_list = environment.get_tasks() for ta…
はじめに ubuntu上でhaskellの環境を構築します。 エディタにはemacsを使います。*1 install haskell 最近のhaskellはghcを直接インストールするのではなく、haskell platformを利用すると良いそうです。 Download Haskellhaskell platformで何が入るのでし…
pythonを使っていて、rubyのopenstructのような振る舞いをするオブジェクトが欲しくなりました。 具体的には以下のように振る舞って欲しいのです。 os = OpenStruct(x=10) os.x # => 10 os.y = 20 (os.x, os.y) # => (10, 20) collections.namedtupleは近い…
wget http://dl.dropbox.com/u/1276730/python.info sudo install-info python.info sudo ginstall-info --dir-file=/usr/share/info/dir --info-file=python.info sphinx-infoというプロジェクトもあるみたい。 http://bitbucket.org/jonwaltman/sphinx-inf…
http://programmingpraxis.com/2010/11/23/string-subsets/ import operator import collections def is_str_subset(sub, base): D = collections.defaultdict(lambda : 0) for c in list(base): D[c] += 1 for c in list(sub): D[c] -= 1 if D[c] < 0: retu…
http://programmingpraxis.com/2010/12/03/maximum-sum-subsequence/ def max_subseq(xs): prev_max, cur_max = 0,0 for x in xs: tmp = x+prev_max if prev_max >= 0 else x cur_max = max(tmp, cur_max) prev_max = tmp return cur_max L=[31, -41, 59, 26…
http://programmingpraxis.com/2010/11/30/form-letters/ import re def from_letters(message, seq): def repl(m): i = int(m.group(2)) return m.group(1)+seq[i] return re.sub(r'([^\$])\$(\d+)', repl, message) S = """ Welcome back, $1! We hope tha…
この記事はEmacs Advent Calenderの4日目です。はじめてのadvent calenderで何を書けば良いか考えてたのですが、emacs(emacs lisp)ならでは*1機能を紹介することにします。 dynamic scope / lexical scope 最近使われる言語*2の多くがlexical scopeを採用し…
pythonでやってみました。なかなか綺麗にならない>< Source これはテスト用のdummyクラス Computer 件のクラス(メタプログラミング) code __init__より下にある関数は全部__init__のローカル関数。types.MethodTypeを使ってコンストラクタを実行時にインス…
メタプログラミングrubyの内容をpythonでやってみようと思い試行錯誤していた途中で発見。 types.MethodTypeに渡すと関数がメソッドに変化するらしい。 特異メソッドの定義 #define eigen method examples class A(): def __init__(self, x): self.x = x def…
gevent rubyのeventmachineのpython版みたいなもの?libeventのwrapperっぽい。 install ubuntu10.10。geventを入れるには、libeventをインストールしておく必要がある。*1 sudo aptitude install libevent-1.4-2 libevent-dev sudo pip install gevent *1:…
Emacs Advent Calendar jp: 2010 : ATNDのprognの記事を見てwith-named-prognというマクロを考えてみました。gistにアップしてコメントで紹介ということをしてみました*1が一応こちらの日記にも転載。使い方などはgistのコメント欄を見てみてください。https…
treeコマンドのようなものをPythonで書いてみた。generator(yield)を使ってディレクトリを走査する部分と、ターミナルに描画する部分を分けようと思ったのだけれど綺麗に書けない。理由はたぶんこういうこと。 再帰的なyieldがつかえない。 yield _walk(...)…