Diamant

Diamant

Facile

Instructions

Le kata du diamant prend une lettre en entrée et la représente sous la forme d’un diamant. Pour une lettre donnée, il affiche un diamant commençant par « A », la lettre fournie se trouvant au point le plus large.

Exigences

  • La première ligne contient un seul « A ».
  • La dernière ligne contient un seul « A ».
  • Toutes les lignes, sauf la première et la dernière, contiennent exactement deux lettres identiques.
  • Toutes les lignes ont autant d’espaces en fin de ligne qu’en début de ligne. (Cela peut être 0).
  • Le diamant est symétrique horizontalement.
  • Le diamant est symétrique verticalement.
  • Le diamant a une forme carrée (la largeur est égale à la hauteur).
  • Les lettres forment une forme de diamant.
  • La moitié supérieure contient les lettres dans l’ordre croissant.
  • La moitié inférieure contient les lettres dans l’ordre décroissant.
  • Les quatre coins (qui contiennent les espaces) sont des triangles.

Exemples

Dans les exemples suivants, les espaces sont indiqués par des caractères ·.

Diamant pour la lettre « A » :

A

Diamant pour la lettre « C » :

··A··
·B·B·
C···C
·B·B·
··A··

Diamant pour la lettre « E » :

····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····

Indices

Tu dois implémenter la fonction diamond, qui affiche un losange commençant à A, avec le caractère donné à ses points les plus larges. Tu peux utiliser la signature fournie si tu as un doute sur les types, mais ne la laisse pas restreindre ta créativité :

diamond :: Char -> Maybe [String]

Cet exercice manipule des données textuelles. Pour des raisons historiques, le type String de Haskell est synonyme de [Char], une liste de caractères. Pour manipuler plus efficacement des données textuelles, on peut utiliser le type Text.

Comme prolongement facultatif de cet exercice, tu peux

import qualified Data.Text as T
import           Data.Text (Text)
  • Tu peux maintenant écrire par exemple diamond :: Char -> Maybe [Text] et faire référence aux combinateurs de Data.Text comme par exemple T.pack,
  • Consulter la documentation de Data.Text,
  • Tu peux ensuite remplacer toutes les occurrences de String par Text dans Diamond.hs :
diamond :: Char -> Maybe [Text]

Cette partie est entièrement facultative.


Source

Seb RoseLe lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Haskell Exercism

Prêt à commencer Diamant ?

Inscris-toi sur Exercism pour apprendre et maîtriser Haskell avec 107 exercices, et un vrai mentorat humain, le tout gratuitement.