菱形

菱形

困難

說明

鑽石 kata 的輸入是一個字母,輸出則是鑽石形狀。 給定一個字母,它會印出一個以 'A' 開頭、並讓傳入的字母落在最寬處的鑽石。

需求

  • 第一列包含一個 'A'。
  • 最後一列包含一個 'A'。
  • 除了第一列和最後一列之外,每一列都恰好有兩個相同的字母。
  • 每一列的前導空格數和尾隨空格數相同。(可能是 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····

提示

這個練習的測試和你平常遇到的測試不太一樣。一般來說,測試會檢查在給定某個輸入時,輸出是否與預期的值相符。這叫做_基於值的測試_(英文:value-based testing)。不過,這個練習使用的是_基於屬性的測試_(英文:property-based testing),測試會檢查在一系列的輸入下,輸出是否具有某個特定的屬性。基於屬性的測試和基於值的測試有兩個關鍵差異:

  1. 基於屬性的測試不是只處理單一個輸入值,而是處理許多個。
  2. 基於屬性的測試驗證的是屬性,而不是具體的值。

在這個練習中,所有測試驗證的都是你的程式碼應該產生的菱形的一項屬性。此外,所有測試都會檢查它們所測試的屬性是否對所有有效的輸入字母('A' 到 'Z')都成立。

為了方便進行基於屬性的測試,這個練習的測試使用了 FsCheck 和 FsCheck.Xunit 這兩個套件。想更了解 FsCheck,可以在這裡找到這個框架的說明文件。

如果你想更了解基於屬性的測試,可以看看這篇文章。


出處

Seb Rose連結會在新視窗或分頁中開啟
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 菱形 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。