2008-04-01から1ヶ月間の記事一覧

Problem24

30分プログラム、その295。Problem24 via Project Euler。 順列とはモノの順番付きの並びのことである. たとえば, 3124は数1, 2, 3, 4の一つの順列である. すべての順列を数の大小でまたは辞書式に並べたものを辞書順と呼ぶ. 0と1と2の順列を辞書順に並べる…

Problem23が解けた

30分プログラム、その294。やっと、Problem23が解けた。 完全数とは, その数の真の約数の和がそれ自身と一致する数のことである. たとえば, 28の真の約数の和は, 1 + 2 + 4 + 7 + 14 = 28であるので, 28は完全数である.真の約数の和がその数よりも少ないもの…

ELPA

id:rubikitchさんから、『CPANコマンドのEmacs版はELPAだよ』という趣旨のメールをいただきました。 インストールが*scratch*にLispコードを実行するだけあたりが実に素敵。ただ、残念ながら登録されているパッケージが少なくて、必要なやつが全然ない。その…

AVM2での関数呼び出し

ABC(ActionScript3 Bytecode)で、関数をどのように呼び出しているかのメモ。 print("Hello,world!!"); をダンプすると次のバイトコードが得られる。 6 findpropstrict print 8 pushstring "Hello,world!!" 10 callproplex print (1) 13 pop finpropstrictで…

mzp_at_ocaml.jp

mzp_at_ocaml.jpでメールが届くようになりました。格好いいっ。

組み合せで表現可能な数字の和

30分プログラム、その293。昨日の続きで、『組み合わせで表現可能な数の和』を計算するコード。ハッシュを使ったりして高速化をはかるも挫折。 明日は方針を変えて、Xが過剰数のときN-Xが過剰数であるかをチェックする方法でやってみよう。 使い方 >>> combi…

組み合わせで表現可能な数

30分プログラム、その292。Problem23の「2つの過剰数の和で表現可能な正の整数」を計算しようとしてみた。 もしこれができると、 2つの過剰数の和で書き表せない正の整数の総和 = sum(1,28123) - 2つの過剰数の和で表現可能な正の整数という計算ができるよう…

ActionScript3 Bytecodeを手書きしてみた

http://wiki.libspark.org/wiki/AVM2/Overviewを参考に、ABC(ActionScript3 Bytecode)を手書きしてみた。 動機は、 ABCを出力するコンパイラを作りたい! u30とかのABCの基本データ方を扱えるモジュールがいるから、作った テストするために、バイトコードを…

Problem23が解けない

久しぶりの30分プログラム、その291。Problem23がなかなか解けない。現在の方針は、 素因数分解を利用して約数の和を計算 過剰数のリストを生成する それで表わせない数のリストを生成する 和を計算する という非常に素直なもの。どうも"それで表わせない数…

ABCのバイトコード生成

ABC(ActionScript3 ByteCode)をどうやって生成しているか気になったので、Tamarinのソースツリーに含まれているECMAScript4のコード生成部分を追ってみた。 とりあえず、何もせず終了するだけのプログラムを生成するときのことを想定している。要するに空の…

素数シーケンス

30分プログラム、その290。Pythonで素数シーケンス。 昨日の問題(id:mzp:20080420:abundant)を解くには、高速に約数を計算する必要がある そのためには素因数分解が必要だ そのためには素数が必要だ だから、Pythonで素数を計算しよう ジェネレータを使った…

Tamarinのビルド

オープンソースのActionScript3 VMのTamarinのビルド方法。参考: http://developer.mozilla.org/en/docs/Tamarin_Build_Documentationまず、Tamarinをレポジトリからコピーする。 $ hg clone http://hg.mozilla.org/mozilla-central mozilla-centralそして、…

いまさらProject Eulerに登録した

いまさらながら、About - Project Eulerに登録した。だって、答あわせができるなんて知らなかったんだもん。 いくつか2つほど過去のやつで間違えていたことがわかったので、後で直す。(友愛数と回文積)

Problem23 (1) -力づくで挫折-

30分プログラム、その289。Problem23 via Project Euler。 完全数とは, その数の真の約数の和がそれ自身と一致する数のことである. たとえば, 28の真の約数の和は, 1 + 2 + 4 + 7 + 14 = 28であるので, 28は完全数である. 真の約数の和がその数よりも少ない…

id:athosの日記が濃すぎる件について

id:athosの日記が実に濃い。valuesがcall/ccで定義されているのは有名だとか言ってるよ、この人。 とても楽しく読んでいるので、どんどん続けるといいと思います。# valuesをcall/ccで定義できる理由がよく分かりません。誰か対応するcall-with-valuesを見せ…

Problem22

30分プログラム、その288。Problem22 via Project Euler。 5000個以上の名前が書かれている46Kのテキストファイルnames.txt を用いる. まずアルファベット順にソートせよ. のち, 各名前についてアルファベットに値を割り振り, リスト中の出現順の数と掛け合…

Joelの採用ガイド読み終った

ソフトウェア開発者採用ガイド作者: Joel Spolsky,青木靖出版社/メーカー: 翔泳社発売日: 2008/03/20メディア: 単行本(ソフトカバー)購入: 8人 クリック: 121回この商品を含むブログ (57件) を見るJoel on Software(asin:4274066304)といくつかの話が重複…

Problem21 -友愛数の和-

30分プログラム、その287。Problem21 via Project Euler。 d(n)をnの真の約数の和と定義する。(真の約数とはn以外の約数のことである。) もし、d(a) = b かつ d(b) = a を満たすとき、aとbは友愛数(親和数)であるという。 例えば、220の約数は1, 2, 4, 5…

Problem20

30分プログラム、その286。Problem20 via Project Euler。 n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。 100! の各桁の数字の合計を求めよ。 桁の分解といえば、unfold。Erlangの標準ライブラリには無いので、Ruminations of a Programmer: Fun with unfol…

Ubunutuのffmpegでmp3が作れない

Ubuntu 7.10の普通にapt-getしたffmpegではmp3が作れないらしい。mp3を作れるバージョンのffmpegは、MediaUbuntu向けのレポジトリで配布されている。まずは、http://blog.browncat.org/2008/02/medibuntu.htmlを参考にレポジトリを追加する。 $ sudo wget ht…

Problem19

30分プログラム、その285。Problem 19 via Project Euler。 次の情報が与えられている。 1900年1月1日は月曜日である。 9月、4月、6月、11月は30日まであり、2月を除く他の月は31日まである。 2月は28日まであるが、うるう年のときは29日である。 うるう年は…

ocaml.jp

http://ocaml.jpOCamlの事実上日本の公式ページであるhttp://ocaml.jpがリニューアルされました。詳しいことはメーリングリストでアナウンスされるんじゃないかと思います。 あとOCamlのページなのに、PukiWikiを使っていることは気にしないほうがいいと思い…

Problem18

30分プログラム、その284。Problem18 via Project Euler。 以下の三角形の頂点から下まで移動するとき、その数値の合計の最大値は23になる。 3 7 5 2 4 6 8 5 9 3 この例では 3 + 7 + 4 + 9 = 23以下の三角形を頂点から下まで移動するとき、その最大の合計値…

Problem17

30分プログラム、その283。Problem17 via Project Euler。 1 から 5 までの数字を英単語で書けば one, two, three, four, five であり、全部で 3 + 3 + 4 + 4 + 5 = 19 の文字が使われている。 では 1 から 1000 (one thousand) までの数字をすべて英単語で…

Problem16

30分プログラム、その282。Problem16 via Project EulerをGaucheで。 215 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。 同様にして、21000 の各数字の合計を求めよ。 特に問題なく解けた。ポイントを述べるならば、数字を桁ごとに…

Problem15

30分プログラム、その281。Problem15 via Project Euler。 2 × 2 のマス目の左上からスタートした場合、引き返しなしで右下にいくルートは 6 つある。では、20 × 20 のマス目ではいくつのルートがあるか。 これは、確か高校でもやった気がする。20×20の場合…

Problem14(4) -Numモジュール-

jijixiさんのアドバイスも試してみた。 jijixi 2008/04/05 00:12 『Hashtbl.hash は big_int の値に対して常に同じ値を返してしまうので、こいつをhash 関数の実装として使ってしまうと全くハッシュテーブルを使う意味がありません。かと言って、じゃあどの…

Problem14(3) -64bit-

30分プログラム、その280。osiireさんのアドバイスを試してみる。 知ってるとは思うけど、64bitCPUならOCamlのintは63bitまで使えますよ。 bigint使わなくても解けたりしない? iMac G5だから64ビットのはずなんだけどなぁ、と思いつつ調べてみると、コンパ…

Problem14(2) -BigInt-

30分プログラム、その279。Problem14 3n+1問題の続き。 昨日のプログラムにPrintfをしこんで追いかけてみると、一部でオーバーフローが発生しているため値が収束しなくなっていた。 そこで、OCamlの任意精度整数ライブラリ、BigIntモジュールを使ってみた。…

Problem14(2) -動的計画法-

30分プログラム、その278。Problem14 3n+1問題の続き。 wikipedia:コラッツの問題の図を見ていたら、1まで計算する必要がないことに気がついた。例えば、20と21の場合、 20->10-> 5->16-> 8-> 4-> 2-> 1 21->64->32->16-> 8-> 4-> 2-> 1 のようになるので、1…