RubyistのためのRustメモ
Tech「RubyのこれってRustでどうやるの?」をメモしていこうと思います。
主にAtCoderで使うことを想定しています。
参考
- Rustで競技プログラミング スターターキット - Qiita
- Rust で競プロ - うどん記
- Rustで競技プログラミング用の標準入力関数を作った - Qiita
- AtCoder に登録したら解くべき精選過去問 10 問を Rust で解いてみた - Qiita
- Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita
- Tuples - Rust By Example
unwrapって何
他の人の回答を見ているとunwrapががんがん出てきますが、これはOptionのメソッドです。
普通のプログラムではパターンマッチとかでNoneかどうかをチェックすべきですが、競プロの場合は例えば入力データが不正であるケースは考えなくてよいのでがんがんunwrapすることになります。
absがない?
u32にはabsメソッドがありません。unsignedだから要らんやろということですね。
i32にはabsメソッドがあります。
each
for_each
というメソッドがあるけど、AtCoderのrustは1.15.1なので使えなかった。for x in xs {}
で代用できる。
1からnまでのループはfor x in 1..n+1
。Rubyの..
と違って終端が含まれないので注意。0からn-1までがfor x in 0..n
になる
each_with_index
Iterator
のenumerate
メソッドを使うと、indexとのタプルの列に変換してくれる
1.15.1について
AtCoderのrustは1.15.1なので(2018年8月現在)、ネットで調べた書き方ができないこともある。
max
use std::cmp;
して、cmp::max(x, y)
新しいrustだとx.cmp(y)
と書ける。