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

だいぶ慣れてきた。「4 ? 4 ? 4 ? 4 = 2」

よくあるクイズ。計算機の力を使わずに解きたくない。 [{'expr': ((4, '*', 4), '/', (4, '+', 4)), 'ans': 2}, {'expr': ((4, '/', 4), '+', (4, '/', 4)), 'ans': 2}, {'expr': (4, '-', ((4, '+', 4), '/', 4)), 'ans': 2}, {'expr': (4, '/', ((4, '+', …

problem43

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 +…

problem42

アルファベットを数字に対応させた際の単語の和が三角数になるものの数を数える問題。 まだ、どのように書けば十分なのかというのが把握できていない。これはクラスにした方が良かったかもしれない。 def _str_to_val(offset): def _calc(s): n = 0 for c in…

sibilant

ちょっと癖のある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…

problem41

長さが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…

とてもliteなpython用のemacsの設定

前書き(飛ばし読み推奨) 最近、ようやく、pythonで小さなコードを書くようになってきた。そして少し考え方が変わってきた。以前は、repl*1との連携を重要視してきたのだけれど、日常的なコードを書くのなら、もっと手軽な環境で十分なような気がしている。re…

euler40

汚いな。 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 > …

euler39

まだ、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-mode.el

toggle-file 現在のバッファのファイル名に対応付けられた名前のファイルを開くためのMinor-mode。 例えば、memo.txtに清書。memo.tmp.txtに下書きというようにして、清書と下書きの間を行ったり来たりできます。 foo.txt <-toggle-> foo.tmp.txt ;;(default…

nodejsの設定

nodejsって? 省略 install aptで入るのですが、何やら古いのか、設定が異なるのかtutorialすらまともに動かなかったので自分でビルドすることにしました。 N=3 sudo apt-get build-dep nodejs #ビルドに必要なパッケージを集める wget http://nodejs.org/di…

sphinxで個人的なメモを取る際のemacsの設定

(昨日はwindowsなのに今回はunixの話です) sphinxをemacs上で使う際にしておいた方が良さそうだと感じた設定のめもだいたい以下のような内容が含まれてます。 全角空白がウザい "make html"を手軽に 出来上がったhtmlを手軽に閲覧 指定した箇所に空白3つ前置…

windowsでsphinxを使うためのエディタ選び Meryのインストール

sphinxについて sphinx用のエディタに必要な機能 UTF-8で保存する機能 できればデフォルトのエンコーディングを指定できると良い。 タブ機能 きっといっぱいファイルを開くので Meryのインストール Meryを普通にインストールした後に、デフォルトのエンコー…

whileでループを回すのは苦手です。

elispを読んでいるときに、whileがある箇所に辿り着くと頭が「うー」ってなります。何か読み辛いんですよ。 単純なループだったらdolist 構造的なループだったらloopマクロ を使って欲しいななんて思ったりします。loopマクロと言っても、全部の機能を使う必…

pywhchを作成

まちがい 概要 easy_installなどで入ったコマンドの在り処を調べる。 % pywhich sphinx-build #/usr/local/lib/python2.6/dist-packages/sphinx.py 動機 easy_installやpipで入ったコマンドが、どこで定義されたものなのかわからない。 % cat `which sphinx-…

anything-git-project

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…

Longest Duplicated Substring

http://programmingpraxis.com/2010/12/14/longest-duplicated-substring/ だいぶpythonの書き方が分かってきた。きれいに書こうとしない方が逆に綺麗になる。python。 どこからでも値が変えられるというのは、やっぱり副作用も便利だなと思ったり。

paverでタスクリストの補完ができるようにする(汎用的じゃないです)

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…

haskellの環境を構築(ubuntu10.10)

はじめに ubuntu上でhaskellの環境を構築します。 エディタにはemacsを使います。*1 install haskell 最近のhaskellはghcを直接インストールするのではなく、haskell platformを利用すると良いそうです。 Download Haskellhaskell platformで何が入るのでし…

pythonでopenstructを作成。

pythonを使っていて、rubyのopenstructのような振る舞いをするオブジェクトが欲しくなりました。 具体的には以下のように振る舞って欲しいのです。 os = OpenStruct(x=10) os.x # => 10 os.y = 20 (os.x, os.y) # => (10, 20) collections.namedtupleは近い…

pythonのドキュメントをinfo形式でみよう。

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…

String Subset

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…

Maximum Sum Subsequence

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…

From Letters

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…

fletで関数を横取りする

この記事はEmacs Advent Calenderの4日目です。はじめてのadvent calenderで何を書けば良いか考えてたのですが、emacs(emacs lisp)ならでは*1機能を紹介することにします。 dynamic scope / lexical scope 最近使われる言語*2の多くがlexical scopeを採用し…

メタプログラミングruby2章のdynamic-dispathの例をpythonで

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を使ってみる。

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:…

with-named-progn

Emacs Advent Calendar jp: 2010 : ATNDのprognの記事を見てwith-named-prognというマクロを考えてみました。gistにアップしてコメントで紹介ということをしてみました*1が一応こちらの日記にも転載。使い方などはgistのコメント欄を見てみてください。https…

treeコマンド(generator)

treeコマンドのようなものをPythonで書いてみた。generator(yield)を使ってディレクトリを走査する部分と、ターミナルに描画する部分を分けようと思ったのだけれど綺麗に書けない。理由はたぶんこういうこと。 再帰的なyieldがつかえない。 yield _walk(...)…