トラック
/
C#
C#
/
演習
/
ダイヤモンド
ダイヤモンド

ダイヤモンド

上級

説明

ダイヤモンドのKataは、文字を1つ入力として受け取り、それをダイヤモンドの形で出力します。 文字を1つ受け取ると、'A'から始まり、渡された文字が最も幅の広い位置にくるダイヤモンドを出力します。

要件

  • 最初の行には、'A'が1つだけ含まれます。
  • 最後の行には、'A'が1つだけ含まれます。
  • 最初と最後の行を除くすべての行には、同じ文字がちょうど2つ含まれます。
  • すべての行は、先頭のスペースと同じ数だけ末尾にもスペースがあります。(0の場合もあります)
  • ダイヤモンドは左右対称です。
  • ダイヤモンドは上下対称です。
  • ダイヤモンドは正方形の形をしています(幅と高さが等しい)。
  • 文字がダイヤモンドの形を作ります。
  • 上半分では、文字が昇順に並びます。
  • 下半分では、文字が降順に並びます。
  • 四隅(スペースが入る部分)は三角形です。

例

以下の例では、スペースは·で表します。

文字'A'のダイヤモンド:

A

文字'C'のダイヤモンド:

··A··
·B·B·
C···C
·B·B·
··A··

文字'E'のダイヤモンド:

····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····

ヒント

この演習のテストは、いつものテストとは違います。通常、テストは、ある入力に対して出力が期待する値と一致するかどうかを確認します。これを_値ベースのテスト_と呼びます。しかし、この演習では_プロパティベースのテスト_を使います。これは、さまざまな入力に対して、出力が特定の性質を持っているかどうかを確認するものです。値ベースのテストとプロパティベースのテストを分ける、2つの大きな違いは次のとおりです。

  1. プロパティベースのテストは、1つの入力値ではなく、たくさんの入力値で動きます。
  2. プロパティベースのテストは、具体的な値ではなく、性質を検証します。

この演習では、テストはすべて、書いたコードが作り出すべきダイヤモンドの形の性質を検証します。さらに、どのテストも、検証する性質がすべての有効な入力文字('A'から'Z'まで)に当てはまるかどうかを確認します。

プロパティベースのテストをやりやすくするために、この演習のテストではFsCheckとFsCheck.Xunitのパッケージを利用しています。FsCheckについてもっと知りたい場合は、こちらにフレームワークのドキュメントがあります。

プロパティベースのテストについてもっと知りたい場合は、こちらの記事をご覧ください。


出典

Seb Roseリンクは新しいウィンドウまたはタブで開きます
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C# Exercism

ダイヤモンドを始める準備はできましたか?

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