kuretchi's blog

kuretchi's blog

競技プログラミングなどなど...

Rust

Rust で自動メモ化マクロ

作ってしまいました.かなり雑.Rust 1.15.1 で動きます. macro_rules! __memoize_internal { (@vec $FRetT:ty) => { Option<$FRetT> }; (@vec $FRetT:ty, $memo_param_head:ident $(, $memo_param:ident)*) => { Vec<__memoize_internal!(@vec $FRetT $(, $memo_param)*)> }; (@indices [$($t:tt)*]) => { [$($t</__memoize_internal!(@vec>…

ラッパーの参照と参照のラッパー

何かをラップした構造体を作ることがよくある.例えば,何らかの 1 ワードの値 hoge を常に引き回す必要があるとき: struct Value {} impl Value { fn f0(&self, hoge: usize) {} fn f1(&self, hoge: usize, fuga: i32) {} // ... } こんな構造体を作って,…

Rust の多次元 Vec を初期化するマクロ

小ネタ. Rust で多次元 Vec (dp[0][1][2] のように使えるもの) を作りたい.例えば None で初期化された $2 \times 3 \times 4$ の Vec<Vec<Vec<Option<T>>>> を作るときはこう書く. vec![vec![vec![None; 4]; 3]; 2] うーん.という訳でこんなマクロ. macro_rules! nested_</vec<vec<option<t>…