雨滴

雨滴

简单

简介

雨滴是 FizzBuzz 挑战的稍微复杂一点的版本,这是一个经典的面试题。

说明

你的任务是把一个数字转换成它对应的雨滴声。

如果给定的数字:

  • 能被 3 整除,就在结果中加上 "Pling"。
  • 能被 5 整除,就在结果中加上 "Plang"。
  • 能被 7 整除,就在结果中加上 "Plong"。
  • 不能被 3、5 或 7 整除,结果就应该是这个数字的字符串形式。

示例

  • 28 能被 7 整除,但不能被 3 或 5 整除,所以结果是 "Plong"。
  • 30 能被 3 和 5 整除,但不能被 7 整除,所以结果是 "PlingPlang"。
  • 34 不能被 3、5 或 7 整除,所以结果是 "34"。
Note

判断一个数能否被另一个数整除,一种常见做法是比较余数或模是否为零。 大多数语言都为其中一种(或两种)提供了运算符或函数。

提示

你需要实现 convert函数,将数字转换为雨滴声并返回。如果不确定类型,可以使用给出的签名,但不要让它限制你的创造力:

convert :: Int -> String

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

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

import qualified Data.Text as T
import           Data.Text (Text)
  • 现在你可以写例如convert :: Int -> Text,并用例如T.pack来引用Data.Text的组合子。
  • 查阅Data.Text的文档,
  • 然后你可以在 Raindrops.hs 中把所有String替换为Text:
convert :: Int -> Text

这部分完全是可选的。

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

准备好开始 雨滴 了吗?

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

深入探索 雨滴!

探索各种解法:函数式管道、矩阵乘法、用宏实现的预计算查表法、面向对象方法、Python 和 TCL 的一些精彩用法,以及一个企业版。