Diamante

Diamante

Fácil

Instrucciones

La kata del diamante recibe una letra y la muestra en forma de diamante. Dada una letra, imprime un diamante que empieza con 'A', con la letra proporcionada en el punto más ancho.

Requisitos

  • La primera fila contiene una 'A'.
  • La última fila contiene una 'A'.
  • Todas las filas, excepto la primera y la última, tienen exactamente dos letras idénticas.
  • Todas las filas tienen tantos espacios finales como espacios iniciales. (Puede ser 0).
  • El diamante es simétrico horizontalmente.
  • El diamante es simétrico verticalmente.
  • El diamante tiene forma cuadrada (el ancho es igual a la altura).
  • Las letras forman la figura de un diamante.
  • La mitad superior tiene las letras en orden ascendente.
  • La mitad inferior tiene las letras en orden descendente.
  • Las cuatro esquinas (que contienen los espacios) son triángulos.

Ejemplos

En los siguientes ejemplos, los espacios se indican con el carácter ·.

Diamante para la letra 'A':

A

Diamante para la letra 'C':

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

Diamante para la letra 'E':

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

Pistas

Necesitas implementar la función diamond, que dibuja un rombo que empieza en A y que tiene el carácter dado en sus puntos más anchos. Puedes usar la firma que te proporcionamos si tienes dudas sobre los tipos, pero no dejes que limite tu creatividad:

diamond :: Char -> Maybe [String]

Este ejercicio trabaja con datos textuales. Por razones históricas, el tipo String de Haskell es sinónimo de [Char], una lista de caracteres. Para un manejo más eficiente de datos textuales, se puede usar el tipo Text.

Como extensión opcional de este ejercicio, puedes

import qualified Data.Text as T
import           Data.Text (Text)
  • Ahora puedes escribir, por ejemplo, diamond :: Char -> Maybe [Text] y referirte a los combinadores de Data.Text como, por ejemplo, T.pack,
  • Buscar la documentación de Data.Text,
  • Luego puedes reemplazar todas las apariciones de String por Text en Diamond.hs:
diamond :: Char -> Maybe [Text]

Esta parte es totalmente opcional.


Fuente

Seb RoseEl enlace se abre en una ventana o pestaña nueva
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Haskell Exercism

¿Todo listo para empezar Diamante?

Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.