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

Encode::EUCJPMS 0.06 Released

Encode-EUCJPMS-0.06 をリリースしました。新たに CP50220 と CP50221 をサポートしています。CP50222 はあえて未サポート。 作り掛けで放置していたところに、弾さん経由で英語の助けてメールが来たから、さくっと作ってしまった(ぉ

Vista の MS UI Gothic

Windows Vista では MS ゴシック や MS 明朝 のフォントがある条件で全面的に変わるのですが、それを見てみました。Vista版の MS UI Gothic だと WAVE DASH が変わっていたり、各種漢字が収録されたりといった変更が行われています。が、それ以外にも、…

正規表現で素数探索

def sieve_regex(max) table = ' ' + (2..max).map{|i|i.to_s}.join(' ') (2..Math.sqrt(max)).each do |i| 1 while table.gsub!(/^((?:\d* ){#{i-1}}(?:(?:\d* ){#{i}})+)\d+/){$1} end table endperl -le '$,=" "; print grep { (1 x $_) !~ /^(11+)\1+$/ …

エラトステネスの篩の改良

上のソースでは探索範囲1つにつき true/false を作るので、1億まで探索しようと思うとかなりのメモリが必要となる。どうせ真偽値なのだから、BitArray を用いれば候補一つにつき 1bit で済む。また、偶数はどうせ素数ではないので、奇数のみを探索対象にする…

エラトステネスの篩

なんか、エラトステネスの篩を用いていると言いつつ試行割算法を混同していたり、エラトステネスの篩を用いつつもハッシュを使ったりして速度を落としている例が多いような。エラトステネスの篩では加算しか使わない。だから速い、圧倒的に。 追記: もっとも…

エラトステネスの篩 高速版

def _sieve(primes, min=3, size=1_0000_0000) table = "\xFF" * (size / 8 + 1) max = min + size * 2 - 1 tmax = size mid = Math.sqrt(max).floor primes.each do |i| next if i > mid ti = (i - min) / 2 ti += i while ti < 0 ti.step(tmax, i) do |tj|…

Microsoft IME 2007 の JIS X 0213 と Unicode の対応

Microsoft IME 付属の IME Pad はカナ漢字変換では入力しづらい文字を入力するための手段ですが、これには手書き文字認識や部首画数などに加えて、文字一覧という選択方法があります。参考: IMEパッドの文字一覧を利用して入力する 従来では Unicode と シフ…

素数探索@Ruby

キミならどう書く 2.0 - ROUND 1 -にて、「100までの整数から素数を列挙せよ」とのお題。 (2..100).select{|i|(2...i).all?{|j|i%j!=0}}とりあえず効率無視で短さ重視。 (2..100).select{|i|/^(11+)\1+$/!~'1'*i}と思ったら、perl - 100までの素数 にある正…

Pure-FTPd の IE 対策

ftpd.c の doopts() を以下のように変更するだけ。とりあえずこれで何とかなる。 (ugly hack と言われたが) - if (strncasecmp("utf8 ", args, 5) == 0) { + if (strncmp("UTF8 ", args, 5) == 0) {

Internet Explorer の FTP と UTF-8

概要 IE の FTP には CP932 しか渡してはいけない IEの動作 FTP サーバーにログインする FEAT コマンド送信 (RFC2389) 返ってきた feature list に UTF8 が含まれていたら、opts utf8 on を送信 (RFC2640, ftpext-utf-8) opts utf8 on に 200 OK が返ってき…