雨粒

雨粒

初級

はじめに

雨粒は、面接の定番の質問である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

ある数が別の数で割り切れるかどうかを確かめるよくある方法は、余りまたは剰余を0と比べることです。 ほとんどのプログラミング言語には、どちらか一方(または両方)のための演算子や関数が用意されています。

ヒント

数値を雨粒の音に変換して返すconvert関数を実装する必要があります。型について自信がなければ、用意されているシグネチャを使ってもかまいませんが、それによって自由な発想が制限されないようにしましょう。

convert :: Int -> String

この演習ではテキストデータを扱います。歴史的な理由から、HaskellのString型は文字のリストである[Char]と同義です。テキストデータをより効率よく扱うには、Text型を使うこともできます。

この演習の任意の拡張として、次のことができます。

  • Haskellの文字列型について読んでみましょう。
  • package.yamlの依存関係のリストに- textを追加しましょう。
  • Data.Textを次のようにインポートしましょう。
import qualified Data.Text as T
import           Data.Text (Text)
  • これで、たとえばconvert :: Int -> Textと書いたり、Data.TextのコンビネーターをT.packのように参照したりできます。
  • Data.Textのドキュメントを調べましょう。
  • その後、Raindrops.hs内のStringをすべてTextに置き換えられます。
convert :: Int -> Text

この部分は完全に任意です。

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

雨粒を始める準備はできましたか?

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

雨粒を深く掘り下げよう!

関数型パイプライン、行列の積、マクロを使った事前計算テーブルによる解法、オブジェクト指向のアプローチ、PythonとTCLの見事な活用法、そしてエンタープライズ版まで、さまざまな解法を紹介します。