Rust
競技プログラミング

Rustで競技プログラミング用の標準入力関数を作った

自己紹介

  • Rust歴: チュートリアルを読んだ
  • 競技プログラミング歴: paizaがSランク行っただけ。その他経験なし。
  • Qiita初投稿

概要

「AtcoderでRust使ってブイブイ言わせたい」というモチベで作りました。色々調べたけど、同じ行に複数の数値が与えられた場合に対応した読み込み関数がなかった。(あったら教えて)
以下のread_line関数を呼び出すごとに、次の行にある任意の個数の数値をVec型に格納して返します。型はu32、f32とかなら動きます。速度に関しては何も調べてないです。

ソースコード

use std::str::FromStr;
use std::fmt::Debug;

fn read_line<T>() -> Vec<T>
where T: FromStr, <T as FromStr>::Err : Debug{
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).unwrap();
    s.trim().split_whitespace().map(|c| T::from_str(c).unwrap()).collect()
}

入力テキスト例

2 3 4 5
4 3 5 6
10 12
13 20 34

関数の使い方

fn main(){

    let x : Vec<u32> = read_line();
    let num = x[1];
    println!("num ={}", num);
    for _ in 0..num{
        let values: Vec<i32> = read_line();
        println!("{:?}", values);
    }
}