Diamante

Diamante

Fácil

Instrucciones

El kata del diamante recibe como entrada una letra y la representa con forma de diamante. Dada una letra, imprime un diamante que empieza por la '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. (Esto puede ser 0).
  • El diamante es simétrico horizontalmente.
  • El diamante es simétrico verticalmente.
  • El diamante tiene forma cuadrada (la anchura es igual a la altura).
  • Las letras forman una forma de 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

Tienes que implementar la función diamond, que imprime un rombo que empieza en A y tiene el carácter dado en sus puntos más anchos. Puedes usar la signatura que se proporciona si no estás seguro de 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], un array de caracteres. Para manejar datos textuales de forma más eficiente, se puede usar el tipo Text.

Como ampliación opcional de este ejercicio, puedes:

import qualified Data.Text as T
import           Data.Text (Text)
  • Escribir, por ejemplo, diamond :: Char -> Maybe [Text] y referirte a los combinadores de Data.Text como, por ejemplo, T.pack.
  • Consultar la documentación de Data.Text.
  • Sustituir después 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 nueva ventana o pestaña
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Haskell Exercism

¿Listo para empezar Diamante?

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