0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita Engineer Festa 2024(キータ・エンジニア・フェスタ 2024) - Qiita
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。

Welcome to AtCoder

PracticeA - Welcome to AtCoder

Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。

a
b c
s

この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。

sum s

今回用いた Rust の機能

プログラムの枠組みと変数宣言

Parsing command line arguments - Command Line Applications in Rust

Rust のプログラムは、以下の形で書くことができる。

fn main() {
    // 処理内容
}

let を用いることで、変数を宣言して値を割り当てることができる。

let 変数名 = ;

数値の加算

Add in std::ops - Rust

+ 演算子を用いることで、数値の加算を行うことができる。

データの出力

std::fmt - Rust

println! を用いることで、標準出力にデータを出力し、さらに改行を出力できる。
第1引数に書式文字列、第2引数以降にデータを指定し、書式文字列中の {} の位置にデータを埋め込んで出力できる。

println!(書式文字列, データ, ...)

データの入力

Stdin in std::io - Rust
BufRead in std::io - Rust

以下のようにすることで、標準入力から1行ずつ読み込むイテレータを得ることができる。

let mut lines = io::stdin().lines();

イテレータを用いる際は、let だけでなく mut もつけないと、値を取得する処理でエラーになるようである。

このイテレータは Option<Result<String, Error>> 型のデータを返すので、2回 unwrap() を用いることで各行のデータを文字列 (String) で得ることができる。
得られる文字列は改行文字を含まないようである。

let line = lines.next().unwrap().unwrap();

この機能は std::io モジュールを用いるので、プログラムの先頭で以下のようにしてこのモジュールを取り込む。

use std::io;

文字列の数値への変換

String in std::string - Rust

文字列.parse().unwrap() を用いることで、文字列を数値に変換できる。
変換先の型は、代入先の型で指定できる。

let str = "72";
let value : i32 = str.parse().unwrap();

文字列の分割

String in std::string - Rust

文字列.split_whitespace() により、文字列を空白で分割した各部分を得るイテレータを得ることができる。

let str = "hello world";
let mut parts = str.split_whitespace();

このイテレータは Option<&str> 型の値を返すので、1回 unwrap() を用いることで各部分の文字列を得ることができる。

let part = parts.next().unwrap();

提出コード

use std::io;

fn main() {
    let mut lines = io::stdin().lines();
    let line1 = lines.next().unwrap().unwrap();
    let line2 = lines.next().unwrap().unwrap();
    let line3 = lines.next().unwrap().unwrap();
    let a : i32 = line1.parse().unwrap();
    let mut bc = line2.split_whitespace();
    let b : i32 = bc.next().unwrap().parse().unwrap();
    let c : i32 = bc.next().unwrap().parse().unwrap();
    println!("{} {}", a + b + c, line3);
}

提出 #55491327 - AtCoder Beginners Selection

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?