Diamante

Diamante

Facile

Istruzioni

La kata del diamante prende in input una lettera e la dispone in output a forma di diamante. Data una lettera, stampa un diamante che inizia con 'A', con la lettera fornita nel punto più largo.

Requisiti

  • La prima riga contiene una sola 'A'.
  • L'ultima riga contiene una sola 'A'.
  • Tutte le righe, tranne la prima e l'ultima, contengono esattamente due lettere identiche.
  • Tutte le righe hanno tanti spazi finali quanti spazi iniziali. (Possono essere 0).
  • Il diamante è simmetrico orizzontalmente.
  • Il diamante è simmetrico verticalmente.
  • Il diamante ha una forma quadrata (la larghezza è uguale all'altezza).
  • Le lettere formano la forma di un diamante.
  • La metà superiore ha le lettere in ordine crescente.
  • La metà inferiore ha le lettere in ordine decrescente.
  • I quattro angoli (che contengono gli spazi) sono triangoli.

Esempi

Nei seguenti esempi, gli spazi sono indicati con il carattere ·.

Diamante per la lettera 'A':

A

Diamante per la lettera 'C':

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

Diamante per la lettera 'E':

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

Suggerimenti

Devi implementare la funzione diamond, che stampa un rombo che parte da A e ha il carattere dato nei suoi punti più larghi. Puoi usare la firma fornita se hai dubbi sui tipi, ma non lasciare che limiti la tua creatività:

diamond :: Char -> Maybe [String]

Questo esercizio lavora con dati testuali. Per ragioni storiche, il tipo String di Haskell è sinonimo di [Char], una lista di caratteri. Per gestire i dati testuali in modo più efficiente, si può usare il tipo Text.

Come estensione facoltativa di questo esercizio, puoi

  • Leggere qualcosa sui tipi stringa in Haskell.
  • Aggiungere - text all'elenco delle dipendenze in package.yaml.
  • Importare Data.Text in questo modo:
import qualified Data.Text as T
import           Data.Text (Text)
  • Ora puoi scrivere ad esempio diamond :: Char -> Maybe [Text] e riferirti ai combinatori di Data.Text come ad esempio T.pack,
  • Consultare la documentazione di Data.Text,
  • Puoi quindi sostituire tutte le occorrenze di String con Text in Diamond.hs:
diamond :: Char -> Maybe [Text]

Questa parte è del tutto facoltativa.


Fonte

Seb RoseIl link si apre in una nuova finestra o scheda
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Haskell Exercism

Vuoi iniziare Diamante?

Iscriviti a Exercism per imparare e padroneggiare Haskell con 107 esercizi e il mentoring di persone reali, tutto gratis.