Diamond

Diamond

Easy

Instructions

The diamond kata takes as its input a letter, and outputs it in a diamond shape. Given a letter, it prints a diamond starting with 'A', with the supplied letter at the widest point.

Requirements

  • The first row contains one 'A'.
  • The last row contains one 'A'.
  • All rows, except the first and last, have exactly two identical letters.
  • All rows have as many trailing spaces as leading spaces. (This might be 0).
  • The diamond is horizontally symmetric.
  • The diamond is vertically symmetric.
  • The diamond has a square shape (width equals height).
  • The letters form a diamond shape.
  • The top half has the letters in ascending order.
  • The bottom half has the letters in descending order.
  • The four corners (containing the spaces) are triangles.

Examples

In the following examples, spaces are indicated by characters.

Diamond for letter 'A':

A

Diamond for letter 'C':

路路A路路
路B路B路
C路路路C
路B路B路
路路A路路

Diamond for letter 'E':

路路路路A路路路路
路路路B路B路路路
路路C路路路C路路
路D路路路路路D路
E路路路路路路路E
路D路路路路路D路
路路C路路路C路路
路路路B路B路路路
路路路路A路路路路

You need to implement the diamond function which prints a diamond starting at A with the given character at its widest points. You can use the provided signature if you are unsure about the types, but don't let it restrict your creativity:

diamond :: Char -> Maybe [String]

This exercise works with textual data. For historical reasons, Haskell's String type is synonymous with [Char], a list of characters. For more efficient handling of textual data, the Text type can be used.

As an optional extension to this exercise, you can

import qualified Data.Text as T
import           Data.Text (Text)
  • You can now write e.g. diamond :: Char -> Maybe [Text] and refer to Data.Text combinators as e.g. T.pack,
  • Look up the documentation for Data.Text,
  • You can then replace all occurrences of String with Text in Diamond.hs:
diamond :: Char -> Maybe [Text]

This part is entirely optional.


Source

Seb RoseThe link opens in a new window or tab
Edit via GitHub The link opens in a new window or tab
Haskell Exercism

Ready to start Diamond?

Sign up to Exercism to learn and master Haskell with 107 exercises, and real human mentoring, all for free.