AIZU ONLINE JUDGE

AOJ ITP1 トピック#1をRustで解く

AOJ_ITP1_1

Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)のトピック#1の4問をRustで解いてみました。

ITP1 のトピック1は、「プログラミングの入門として、基本構造、変数、入出力、計算式を学習します。」とあります。Rust 入門として解いていきます。

問題(1_A: Hello World)

問題のリンク先:AOJ ITP1 1_A問題:Hello World

文字列を出力する問題です。Rust プログラムのエントリーポイントは、C/C++ と同じ関数 main となります。

関数 main で文字列を出力します。println は、指定された文字列を出力するマクロです。マクロであるため、println! と書いています。

fn main() {
    println!("Hello World");
}

C/C++の printf に近い書き方もできます。{} はプレースホルダーと呼ばれて、後に続く引数を出力します。

fn main() {
    println!("{} {}", "Hello", "World");
}

問題(1_B: X Cubic)

問題のリンク先:AOJ ITP1 1_B問題:X Cubic

ひとつの整数を受け取り、その整数の3乗を出力します。

最初の3行では、文字列を読み込み、行末コードを切り取った後で整数に変換しています。

fn main() {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).unwrap();
    let x: i32 = s.trim().parse().unwrap();

	println!("{}", x * x * x);
}

3乗は、pow メソッドでも計算できます。以下となります。

fn main() {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).unwrap();
    let x: i32 = s.trim().parse().unwrap();

	println!("{}", x.pow(3));
}

問題(1_C: Rectangle)

問題のリンク先:AOJ ITP1 1_C問題:Rectangle

二つの整数を受け取り、計算結果を出力します。

整数を2つ文字列から切り出すためにメソッド split_whitespace を使っています。切り出された文字列を parse して、整数を得ています。

fn main() {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).unwrap();
    let mut ws = s.trim().split_whitespace();
    let a: i32 = ws.next().unwrap().parse().unwrap();
    let b: i32 = ws.next().unwrap().parse().unwrap();

    println!("{} {}", a * b, 2 * (a + b));
}

問題(1_D: Watch)

問題のリンク先:AOJ ITP1 1_D問題:Watch

整数を入力として、計算結果をフォーマットした文字列で出力する問題です。

Rust の変数は、mut を指定しないと初期化した値から再代入ができません。値を切り替えれるようにするためには、文字列 buf の宣言のように mut(mutable: 可変)を指定する必要があります。

fn main() {
    let mut buf = String::new();
    std::io::stdin().read_line(&mut buf).unwrap();
    let s: i32 = buf.trim().parse().unwrap();

    let hour: i32 = s / (60 * 60);
    let minute: i32 = s / 60 % 60;
    let second: i32 = s % 60;

    println!("{}:{}:{}", hour, minute, second);
}

ここで紹介したすべてのプログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されました。

最後に

Rust の習熟度を上げるために、Python の場合と同じく、このコースを活用することにしました。簡単なプログラムですが、Rust の文法を調べながら解いているため勉強になります。

引き続き、Rust で ITP1 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA