轨道
/
C#
C#
/
练习
/
菱形
菱形

菱形

困难

说明

钻石 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····

提示

这个练习中的测试和你平时见到的测试不太一样。通常,测试会检查给定一个输入时,输出是否与期望值一致。这称为_基于值的测试_。而这个练习使用的是_基于属性的测试_,测试会检查对于一系列输入,输出是否具有某种特定的属性。基于属性的测试与基于值的测试有两个关键区别:

  1. 基于属性的测试不是针对单个输入值,而是针对许多输入值。
  2. 基于属性的测试验证的是属性,而不是具体的值。

在这个练习中,所有测试验证的都是菱形形状的某个属性,而菱形正是你的代码应该生成的。此外,所有测试都会检查它们所验证的属性是否对全部有效的输入字母('A' 到 'Z')都成立。

为了实现基于属性的测试,这个练习中的测试借助了 FsCheck 和 FsCheck.Xunit 包。想进一步了解 FsCheck,可以查看这个框架的文档。

如果你想了解更多关于基于属性的测试的信息,请参阅这篇文章。


来源

Seb Rose链接会在新窗口或新标签页中打开
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 菱形 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。