Διαμάντι

Διαμάντι

Εύκολο

Οδηγίες

Το kata diamond παίρνει ως είσοδο ένα γράμμα και το εμφανίζει σε σχήμα διαμαντιού. Δεδομένου ενός γράμματος, εκτυπώνει ένα διαμάντι που ξεκινά με το 'A', με το γράμμα που δίνεται στο φαρδύτερο σημείο.

Απαιτήσεις

  • Η πρώτη γραμμή περιέχει ένα 'A'.
  • Η τελευταία γραμμή περιέχει ένα 'A'.
  • Όλες οι γραμμές, εκτός από την πρώτη και την τελευταία, έχουν ακριβώς δύο ίδια γράμματα.
  • Όλες οι γραμμές έχουν τόσα κενά στο τέλος όσα και στην αρχή. (Μπορεί να είναι 0).
  • Το διαμάντι είναι οριζόντια συμμετρικό.
  • Το διαμάντι είναι κατακόρυφα συμμετρικό.
  • Το διαμάντι έχει τετράγωνο σχήμα (το πλάτος ισούται με το ύψος).
  • Τα γράμματα σχηματίζουν ένα διαμάντι.
  • Το πάνω μισό έχει τα γράμματα σε αύξουσα σειρά.
  • Το κάτω μισό έχει τα γράμματα σε φθίνουσα σειρά.
  • Οι τέσσερις γωνίες (αυτές που περιέχουν τα κενά) είναι τρίγωνα.

Παραδείγματα

Στα παρακάτω παραδείγματα, τα κενά σημειώνονται με τον χαρακτήρα ·.

Διαμάντι για το γράμμα 'A':

A

Διαμάντι για το γράμμα 'C':

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

Διαμάντι για το γράμμα 'E':

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

Υποδείξεις

Χρειάζεται να υλοποιήσεις τη συνάρτηση diamond που τυπώνει έναν ρόμβο ο οποίος ξεκινά από το A και έχει τον δεδομένο χαρακτήρα στα πλατύτερα σημεία του. Μπορείς να χρησιμοποιήσεις την υπογραφή που δίνεται αν δεν είσαι σίγουρος για τους τύπους, αλλά μην την αφήσεις να περιορίσει τη δημιουργικότητά σου:

diamond :: Char -> Maybe [String]

Αυτή η άσκηση δουλεύει με κειμενικά δεδομένα. Για ιστορικούς λόγους, ο τύπος String της Haskell είναι συνώνυμος με το [Char], μια λίστα χαρακτήρων. Για πιο αποδοτικό χειρισμό κειμενικών δεδομένων, μπορεί να χρησιμοποιηθεί ο τύπος Text.

Ως προαιρετική επέκταση αυτής της άσκησης, μπορείς να

import qualified Data.Text as T
import           Data.Text (Text)
  • Μπορείς τώρα να γράψεις π.χ. diamond :: Char -> Maybe [Text] και να αναφέρεσαι στους συνδυαστές του Data.Text ως π.χ. T.pack,
  • Αναζητήσεις την τεκμηρίωση για το Data.Text,
  • Μπορείς έπειτα να αντικαταστήσεις όλες τις εμφανίσεις του String με Text στο Diamond.hs:
diamond :: Char -> Maybe [Text]

Αυτό το μέρος είναι εντελώς προαιρετικό.


Πηγή

Seb RoseΟ σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Haskell Exercism

Έτοιμος να ξεκινήσεις την άσκηση Διαμάντι;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Haskell με 107 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.