💻
paizaのRustの問題を解いてみる(初心者向け)
機械学習という文脈だとRustのほうがよいのかも?と思い、Rust を学び始めました。
出来たら競プロの問題のような取り組みやすいモノがイイなと思い探したところ、まだ Beta ですが、paiza のレベルアップ問題集を見つけました。
解答を共有してもよい、とのことでしたので学びもかねてまとめてみました。
なお、問題集ということもあり内容は偏っているので、普遍的に Rust を学びたい場合は下記をお勧めいたします。
① 文字列を取得して出力
文字列の入力を取得して出力するシンプルな問題です。
Rust は Python の input、Go の fscan のような入力を取得する関数はないようです。
下記のサイトの入力取得用のマクロを参照ください。
また、文字列の型については下記サイトを参照ください。
解答
use std::io::*;
use std::str::FromStr;
// 入力を取得する関数
fn read<T: FromStr>() -> T {
let stdin = stdin();
let stdin = stdin.lock();
let token: String = stdin
.bytes()
.map(|c| c.expect("failed to read char") as char)
.skip_while(|c| c.is_whitespace())
.take_while(|c| !c.is_whitespace())
.collect();
token.parse().ok().expect("failed to parse token")
}
fn main(){
let a: String = read();
println!("{}", a);
}
② 繰り返し取得&出力
for 文を使った繰り返し処理です。
繰り返し処理については下記サイトを参照ください。
解答
use std::io::*;
use std::str::FromStr;
// 入力を取得する関数
fn read<T: FromStr>() -> T {
let stdin = stdin();
let stdin = stdin.lock();
let token: String = stdin
.bytes()
.map(|c| c.expect("failed to read char") as char)
.skip_while(|c| c.is_whitespace())
.take_while(|c| !c.is_whitespace())
.collect();
token.parse().ok().expect("failed to parse token")
}
fn main(){
let num: u32 = read();
// 繰り返し処理
for n in 0..num {
let x: u32 = read();
// 入力を取得し代入した変数を出力
println!("{}", x);
}
}
③ 入力した内容を配列に保存する
配列処理です。
ベクターという連続する拡張可能な配列型を使用しました。
ベクターの並び替えはソート .sort() を使用します。
ベクターの長さは .len() を使用します。
解答
use std::io::*;
use std::str::FromStr;
// 入力を取得する関数
fn read<T: FromStr>() -> T {
let stdin = stdin();
let stdin = stdin.lock();
let token: String = stdin
.bytes()
.map(|c| c.expect("failed to read char") as char)
.skip_while(|c| c.is_whitespace())
.take_while(|c| !c.is_whitespace())
.collect();
token.parse().ok().expect("failed to parse token")
}
fn main(){
let num = read();
// ベクター
let mut input_vector = Vec::new();
for n in 0..num {
let x: i32 = read();
input_vector.push(x);
}
// 並び替え
input_vector.sort();
//並び替え後、もっとも最後のデータ=最大値を出力
println!("{:?}", input_vector[input_vector.len()-1]);
}
本サイトでは以上ですが、下記サイトに少しずつ解答を追加していくのでよろしければご覧ください。
1日1問、コツコツ進めていきます。
以上になります、最後までお読みいただきありがとうございました。
Discussion