トラック
/
Cairo
Cairo
/
演習
/
こだまの王国
こだまの王国

こだまの王国

学習演習

はじめに

Cairoでは、プログラムの実行中にメッセージやデバッグ情報を表示できます。

基本

Cairoには、出力用のマクロが2つあります。

  • println!:メッセージを出力し、そのあとに改行します。
  • print!:改行せずにメッセージを出力します。
println!("Hello, Cairo!"); 
println!("x = {}, y = {}", 10, 20); 

プレースホルダーの{}は、渡された値に置き換えられます。

文字列のフォーマット

すぐに出力せずにByteArrayを作るには、format!を使います。

let result = format!("{}-{}-{}", "tic", "tac", "toe");
println!("{}", result); // Output: tic-tac-toe

独自のデータ型

独自の型を出力するには、Displayを実装するか、Debugを導出します。

#[derive(Debug)]
struct Point { x: u8, y: u8 }

let p = Point { x: 3, y: 4 };
println!("{:?}", p); // Debug output: Point { x: 3, y: 4 }

16進数での出力

整数を16進数で出力するには、{:x}を使います。

println!("{:x}", 255); // Output: ff

説明

魔法の世界Echoesには、EchoSpeakと呼ばれる強力な呪文があります。 この呪文を使うと、魔法使いは自分の考えや観察したことを話し言葉で伝えることができ、それが魔法の羽根ペンによって書き出されます。 この呪文をマスターするには、魔法使いは、数値、オブジェクト、複雑な魔法の構造物などについてであっても、自分の言葉や考えを明確かつ簡潔に組み立てる方法を学ぶ必要があります。

Wizard's Apprenticeとして、EchoSpeakの技をマスターすることが課題です。 そのためには、さまざまな種類の魔法のデータを魔法の巻物に出力する方法を学ぶ必要があります。 EchoSpeakは、ByteArrayで表される特別な魔法のインクを取り、println!やprint!のような呪文を使って、フォーマットされたメッセージを巻物に書き記す仕組みです。

しかし、魔法のアイテムや呪文のようなカスタムの魔法の構造物を扱うときには、EchoSpeakがこれらのオブジェクトをどのように表現するかを理解するために、特別な詠唱が必要です。 ここで魔法の出番です。カスタムの魔法のアイテムのためにtraitsと呼ばれる特別な呪文を実装することを学びます。

1. 魔法の言葉をフォーマットする

魔法使いはときどき、魔法の言葉を巻物に書き記す前にフォーマットする必要があります。 3つの魔法の言葉を1つのメッセージにフォーマットする関数を書きます。

format_magical_chantという関数を実装します。この関数は"chant1-chant2-chant3"という形式のフォーマット済み文字列を返します。

例:

let result = format_magical_chant("Spark", "Shine", "Glow");
assert_eq!(result, "Spark-Shine-Glow");

2. カスタムの魔法のアイテムをエコーする

Echoesの世界は魔法のアイテムで満ちています。 その1つがEchoStoneで、powerとdurationという2つの魔法の属性を持っています。 stringify_echo_stone関数を実装することが課題です。この関数は、Displayトレイトを実装することで、EchoStoneを"EchoStone [power: x, duration: y]"という特別な形式のByteArrayに変換します。

例:

let stone = EchoStone { power: 100, duration: 300 };
assert_eq!(stringify(stone), "EchoStone [power: 100, duration: 300]");

3. 魔法をデバッグする

魔法使いの見習いとして、複雑な魔法の構造物を扱うにはデバッグが欠かせません。 Debugトレイトを使ってデバッグ用にEchoStoneを出力する関数を作成します。 フォーマットは"Debugging EchoStone: { power: x, duration: y }"とします。

例:

let stone = EchoStone { power: 25, duration: 10 };
assert_eq!(format!("{:?}", stone), "Debugging EchoStone: { power: 25, duration: 10 }");
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Cairo Exercism

こだまの王国を始める準備はできましたか?

Exercismに登録すれば、25個のコンセプト68個の演習、そして本物の人間によるメンタリングとともに、Cairoを学んでマスターできます。すべて無料です。