トラック
/
Haskell
Haskell
/
演習
/
ダイヤモンド
ダイヤモンド

ダイヤモンド

初級

説明

ダイヤモンドのKataは、文字を1つ入力として受け取り、それをダイヤモンドの形で出力します。 文字を1つ受け取ると、'A'から始まり、渡された文字が最も幅の広い位置にくるダイヤモンドを出力します。

要件

  • 最初の行には、'A'が1つだけ含まれます。
  • 最後の行には、'A'が1つだけ含まれます。
  • 最初と最後の行を除くすべての行には、同じ文字がちょうど2つ含まれます。
  • すべての行は、先頭のスペースと同じ数だけ末尾にもスペースがあります。(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型を使うことができます。

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

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

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


出典

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

ダイヤモンドを始める準備はできましたか?

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