初めに
今年も年の瀬。
振り返ってみると緑になかなか届かない(というより茶色から抜け出せない)一年でした
初心に帰って
他の人の上達具合を読んでいると下記のリンク(水色だけど)に必要条件のようなものが書いてあった
https://qiita.com/e869120/items/eb50fdaece12be418faa#0-%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB
現在自分がどのくらいの状態なのかを判断するため
この記事の2-2-1~3あたりを身に着けているかどうか確認する。
なお、似たようなことをrustでちゃんと書いている人がいる
https://qiita.com/hossie/items/e170eb80f48cdb4f6b51
ふむふむという感じ。例を書いたり自分が知らんかったりするものは使わせてもらう。
#対応に関して
標準ライブラリ
以下が必要なライブラリは以下らしい
C | rust | 把握 |
---|---|---|
abs | (-1).abs() | ○ |
sin/cos/tan | (PI / 2.0).sin() | ○ |
string | string、Chars | o、proconioの型で受ける |
min/max | 1.0.min(2.0) | ○ |
swap | v.swap(0, 2) | ○、index 指定であることに注意 |
__gcd | 要自作 | ○ |
rand | use rand::prelude::*; | ○ |
clock | std::time | × |
reverse | ? | 要自作? |
sort | v.sort() | ○ |
vector | vec![] | o |
stack | vec![] | o |
queue | VecDeque | o |
priority_queue | BinaryHeap | o |
map | HashMap, BTreeMap | o |
lower_bound | superslice::Ext | × |
set | HashSet, BTreeSet | o |
pair | (i32,i64) | o |
tuple | (i32,i64) | o |
assert | assert_eq! | o |
count | v.iter().filter(|&&x| x == 1).count() | x |
find | a.iter().find(|&&x| x == 2 | o |
next_permutation | superslice::Ext | x |
__builtin_popcount | ? | x |
bitset | bitset_fixed::BitSet | x |
後半は全然。
典型的なアルゴリズム
アルゴリズム | rust | 把握 |
---|---|---|
全探索 | 色々 | o |
二分探索 | v.binary_search(&2) | o |
深さ優先探索 (DFS) | 自作 | o |
幅優先探索 (BFS) | 自作 | o |
動的計画法 (DP) | 自作 | o |
ダイクストラ法 | ? | x |
ワーシャルフロイド法 | ? | x |
クラスカル法 | ? | x |
高速な素数判定法 | 自作(エラストテネス) | o |
べき乗を高速に計算する手法 | 自作 | o |
逆元を計算する手法 | 自作 | o |
累積和 | 自作 | o |
こっちは最短経路だけ完全に×
データ構造
アルゴリズム | rust | 把握 |
---|---|---|
グラフ | 自作 | o |
木 | ? | x |
unionfind | 自作 | o |
こんな感じ。木はあんまり見ない気もする
とはいえ結構丸がついてる感じ。とりあえずreverseあたりの実装と最短経路は勉強していきたい。
来年は緑になってるといいなあ