唐突に競技プログラミングにRustで挑戦してみようと思い立ちまして……
まずは基本的な標準入出力を調べながら実装したので、それを残しておきます。
まず、競技プログラミングによくある入力フォーマットを想定します。
N M T
C(0,0)...C(0,n-1)
C(1,0)...C(1,n-1)
.
.
.
C(m-1,0)...C(m-1,n-1)
1行目にN,M,Tの3つの数字がスペース区切りで並んで、
2行目以降はN文字の文字列がM行分並ぶ形です。(大概はこのCに何らかの意味を持つ文字が入る)
この入力を取得して、ほぼそのまま出力する実装はこんな感じになりました。
use std::io;
// 標準入力から1行読み取って改行文字を削除して返す
fn read_string() -> String {
let mut buffer = String::new();
io::stdin().read_line(&mut buffer).unwrap();
buffer
}
fn main() {
// 1行目を取得して、スペースで分割
let str = read_string();
let mut iter = str.split_whitespace();
// 分割した要素を1つずつ数字に変換して n,m,t を取得
let n: u32 = iter.next().unwrap().parse().unwrap();
let m: u32 = iter.next().unwrap().parse().unwrap();
let t: u32 = iter.next().unwrap().parse().unwrap();
// 2行目からm行分取得
let mut c: Vec<Vec<char>> = Vec::new();
for _i in 0..m {
// 1行分の文字列を1文字ずつに分割して、2次元配列的に取得
c.push(read_string().chars().collect());
}
/* 取得した入力をほぼそのまま出力 */
// n m t を出力
println!("{} {} {}", n, m, t);
// Cのデータをスペース区切りで n文字 x m行 で出力
for i in 0..m as usize {
for j in 0..n as usize {
print!("{} ", c[i][j]);
}
print!("\n");
}
}
入出力例はこんな感じ
# 入力
3 4 5
ABC
DEF
GHI
JKL
# 出力
3 4 5
A B C
D E F
G H I
J K L
他にも入力を一気に全行読む方式だったり、
スペース区切りや1文字ずつの切り出しをイテレータで持ったり、配列に入れたり……
やり方は幾つか存在すると思いますが、とりあえずはこんな感じで良さそうです。
※ 普通の業務なら範囲外チェックとかサイズチェックとか入りますが、競技プログラミング向けなので異常入力は存在しない前提での実装になっています)