著作一覧 |
PowerBookをラップトップとして使ってると、最初は暖かくていい気持ちなんだが、ふと気づくと痛くなっている。低温火傷の前兆なんだろうか? (あるいはもう手遅れか)
YARVを使って何かスクリプトを動かしてみようと思ったが、考えたら計算してドンドンみたいなプログラムって全然作らないから何も思いつかない。
そういや、sum(1)とかたまに使うし、あのあたりならどうかなと思ってman sumしたらアルゴリズムが書いてあったんで作ってみた。
This is a 16-bit checksum, with a right rotation before each addition; overflow is discarded.
——man sum (OS X)
こんな感じか
def sum(s) r = 0 s.each_byte do |b| if (r & 1) != 0 r >>= 1 r |= 0x8000 else r >>= 1 end r += b r &= 0xffff end r end File.open(ARGV[0], 'rb') do |f| puts sum(f.read) end
でも、これだとtest.rbに埋め込めないから(ARGVがひっかかる)、適当なファイル名を入れてやってみたけど良くわからないや。
っていうか、readで一度に全部読もうとしているところが諸悪の根源と気づいたり。それでsum(1)だとバイト数じゃなくてブロック数が表示されるのか(多分、この単位で読み込むんだろう)。
ジェズイットを見習え |