Diamante

Diamante

Fácil

Instruções

O kata do diamante recebe uma letra como entrada e a exibe em formato de diamante. Dada uma letra, ele imprime um diamante começando com 'A', com a letra fornecida no ponto mais largo.

Requisitos

  • A primeira linha contém um 'A'.
  • A última linha contém um 'A'.
  • Todas as linhas, exceto a primeira e a última, têm exatamente duas letras idênticas.
  • Todas as linhas têm tantos espaços no final quantos no início. (Pode ser 0.)
  • O diamante é simétrico na horizontal.
  • O diamante é simétrico na vertical.
  • O diamante tem formato quadrado (a largura é igual à altura).
  • As letras formam um formato de diamante.
  • A metade de cima tem as letras em ordem crescente.
  • A metade de baixo tem as letras em ordem decrescente.
  • Os quatro cantos (que contêm os espaços) são triângulos.

Exemplos

Nos exemplos a seguir, os espaços são indicados por caracteres ·.

Diamante para a letra 'A':

A

Diamante para a letra 'C':

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

Diamante para a letra 'E':

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

Dicas

Você precisa implementar a função diamond, que imprime um losango começando em A, com o caractere dado nos seus pontos mais largos. Você pode usar a assinatura fornecida se estiver em dúvida sobre os tipos, mas não deixe que ela restrinja sua criatividade:

diamond :: Char -> Maybe [String]

Este exercício trabalha com dados textuais. Por razões históricas, o tipo String do Haskell é sinônimo de [Char], uma lista de caracteres. Para lidar com dados textuais de forma mais eficiente, pode-se usar o tipo Text.

Como extensão opcional deste exercício, você pode

import qualified Data.Text as T
import           Data.Text (Text)
  • Agora você pode escrever, por exemplo, diamond :: Char -> Maybe [Text] e se referir aos combinadores de Data.Text como, por exemplo, T.pack,
  • Consultar a documentação de Data.Text,
  • Você pode então substituir todas as ocorrências de String por Text no Diamond.hs:
diamond :: Char -> Maybe [Text]

Esta parte é totalmente opcional.


Fonte

Seb RoseO link abre em uma nova janela ou aba
Editar via GitHub O link abre em uma nova janela ou aba
Haskell Exercism

Tudo pronto para começar Diamante?

Crie sua conta no Exercism para aprender e dominar Haskell com 107 exercícios e mentoria humana de verdade, tudo de graça.