Rustで競プロがやりたい(6)
AtCoderの灰色を埋めると決め、githubに解いたコードをあげることにした。
とりあえず灰試験管は全て解くことができたが、かなり詰まってしまった。 Twitterで「これができない」だの「エラーが出る」だの言いまくって、その度に助けてくれた皆には感謝しかない。
灰色問題とはいえ、難易度が高かった。 特に文字列が難しい。
以下のような宣言だと、&strになる。
let S = "Moji";
それを.to_string()でStringになる。
let S = "Moji".to_string();
ところで、String型はstring型ではないらしい。 こういった大文字、小文字もしっかり区別してかかないといけない。
1文字1文字for文で見たいとなったときは、Stringを.chars()で変換しないといけない。
for s in S.chars() { // test }
.chars()でCharsにしたのを.collect()で配列として代入したり。
let S = S.chars().collect::<Vec<char>>();
matchを使うには、.as_str()で変換しないといけなかったり。
match S.as_str() { "abc" => "YES", _ => "NO", }
Stringのi番目の要素を取得したいとき、かなり面倒な手順になるし。
let s = S.chars().nth(i).unwrap();
逆に後ろの文字は.last()で取れるし。
let s = S.chars().last().unwrap();
文字列の操作をしているときにかなり見たのだが、unwrap()をよく使うことになる。 これは、Option型の結果が渡されるので、その中身の値を取り出す、という認識でいる。 本当はエラーを考慮しないといけなかったりしそうなのだが、今回は大丈夫ということにする。
とりあえずやりたいことに合わせて型を変えたり、配列に入れたり、結果を取り出したり...と結構覚えることがたくさんある。 特に型が違うとエラーで使えない、というのが頻発して大変だった。
これ以外にも色々覚えるべき文法はあるが、解き続けて覚えていくしかない。 残りの灰埋めを頑張ることにする。