総括の厳選版をやる予定

月曜日です。


起床し、Rust本を読みました。

のんびり読んでいたら無限に時間を使ってしまった。

Rustに手を出したことで負荷が大きくなってきたので、テンソル解析はしばらくお休みしようと思っています。内容的にも章の区切りでちょうどよかったので。

その後、頭と目を休めるために魔女の旅々のドラマCD2を(今更)聴いてぼーっとしていました。たいへんよいやつでした。


バビロンを視聴しました。基本は原作3巻的な流れになるようですが、正崎さんの物語が補完されていました(原作では斧の後、いきなり北米編になる)。よい。原作は3巻までで放置されていて何も完結してないので、アニメはどうなるのか目が離せません。

ティーをやりながら、「王女殿下はお怒りのようです」3巻を読み進めました。

風花雪月をやり、攻略日記を書きました。


12月の総括をやりました。

これとは別に明日、1年間の総括をやる予定です。

毎月総括をやっているので、1年間の総括のほうは内容を厳選して書きたい。

年末だけ総括をやるとあれもこれも書きたくなってまとまりがなくなっていたのですが、今年は毎月総括をやったことでいい感じに厳選総括ができそうです。


一日の終わりにRustでコードを書きました。とりあえずbit vectorrank() ができました。

一応コードを置いておきます。見ての通り、定数オーダーじゃないやつですが・・・。

以上です。

fn rank(bit_vector: &[u64], index: usize) -> u32 {
    let mut count = 0;
    let last_cell_index = std::cmp::min(index / 64, bit_vector.len());

    for i in 0..last_cell_index {
        count += bit_vector[i].count_ones();
    }
    if last_cell_index < bit_vector.len() {
        count += rank_cell(bit_vector[last_cell_index], index % 64);
    }

    count
}

fn rank_cell(bit_cell: u64, index: usize) -> u32 {
    debug_assert!(index < 64);
    (bit_cell & ((1u64 << index) - 1)).count_ones()
}

#[test]
fn test_rank() {
    let num = (1 << 63) + 1;
    let bv = vec![num, num];
    assert_eq!(rank(&bv, 0), 0);
    assert_eq!(rank(&bv, 1), 1);
    assert_eq!(rank(&bv, 63), 1);
    assert_eq!(rank(&bv, 64), 2);
    assert_eq!(rank(&bv, 65), 3);
    assert_eq!(rank(&bv, 127), 3);
    assert_eq!(rank(&bv, 128), 4);
}