Diamante

Diamante

Fácil

Instruções

O kata do diamante recebe uma letra como entrada e apresenta-a sob a forma de um diamante. Dada uma letra, imprime um diamante que começa com 'A' e tem a letra fornecida no ponto mais largo.

Requisitos

  • A primeira linha contém um único 'A'.
  • A última linha contém um único 'A'.
  • Todas as linhas, exceto a primeira e a última, têm exatamente duas letras iguais.
  • Todas as linhas têm tantos espaços à direita como à esquerda. (Podem ser 0).
  • O diamante é simétrico na horizontal.
  • O diamante é simétrico na vertical.
  • O diamante tem forma quadrada (a largura é igual à altura).
  • As letras formam a figura de um diamante.
  • A metade superior tem as letras por ordem crescente.
  • A metade inferior tem as letras por ordem decrescente.
  • Os quatro cantos (que contêm os espaços) são triângulos.

Exemplos

Nos exemplos seguintes, os espaços são representados por carateres ·.

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

Tens de implementar a função diamond, que imprime um losango que começa em A e tem o caráter dado nos seus pontos mais largos. Podes usar a assinatura fornecida se tiveres dúvidas sobre os tipos, mas não deixes que ela limite a tua 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 carateres. Para um tratamento mais eficiente de dados textuais, pode usar-se o tipo Text.

Como extensão opcional deste exercício, podes

import qualified Data.Text as T
import           Data.Text (Text)
  • Podes agora escrever, por exemplo, diamond :: Char -> Maybe [Text] e referir-te aos combinadores de Data.Text como, por exemplo, T.pack,
  • Consultar a documentação de Data.Text,
  • Podes depois 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 numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
Haskell Exercism

Estás pronto para começar Diamante?

Inscreve-te no Exercism para aprenderes e dominares Haskell com 107 exercícios, e mentoria humana real, tudo grátis.