菱形

菱形

简单

说明

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

提示

你需要实现 diamond 函数,它会打印一个菱形:从 A 开始,最宽处为给定的字符。如果不确定类型,可以使用提供的签名,但别让它限制你的创造力:

diamond :: Char -> Maybe [String]

本练习处理的是文本数据。由于历史原因,Haskell 的 String 类型等同于 [Char],也就是一个字符数组。若要更高效地处理文本数据,可以使用 Text 类型。

作为本练习的可选扩展,你可以

import qualified Data.Text as T
import           Data.Text (Text)
  • 现在你可以写 diamond :: Char -> Maybe [Text] 这样的代码,并以 T.pack 这样的方式引用 Data.Text 的组合子,
  • 查阅 Data.Text 的文档,
  • 然后你就可以在 Diamond.hs 中把所有 String 都替换成 Text:
diamond :: Char -> Maybe [Text]

这部分完全是可选的。


来源

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

准备好开始 菱形 了吗?

注册 Exercism,借助 107 个练习 和真人导师指导,学习并掌握 Haskell,全部免费。