Διαδρομές
/
Crystal
Crystal
/
Ασκήσεις
/
Η βιβλιοθήκη του Luton
Η βιβλιοθήκη του Luton

Η βιβλιοθήκη του Luton

Άσκηση εκμάθησης

Εισαγωγή

Το Char είναι ένας τύπος δεδομένων στη Crystal που αναπαριστά ένα σημείο κώδικα Unicode 32 bit. Το μέγεθός τους τα κάνει οικονομικά σε μνήμη και τους δίνει συγκεκριμένες ιδιότητες που δεν έχουν οι συμβολοσειρές. Δημιουργούνται με απλά εισαγωγικά (') και επιτρέπουν να μπει μέσα μόνο ένα σημείο κώδικα Unicode.

'a' # => 'a'
'a'.class # => Char

Είναι αρκετά συνηθισμένο να δουλεύεις με Chars όταν δουλεύεις με συμβολοσειρές στη Crystal, αφού αρκετές μέθοδοι της κλάσης String επιστρέφουν Chars ή δέχονται Chars ως ορίσματα. Για παράδειγμα, η μέθοδος String#[] επιστρέφει ένα Char, ή η μέθοδος String#chars επιστρέφει μια συλλογή από Chars.

Αύξηση / Μείωση

Επειδή το char είναι ένα σημείο Unicode 32 bit, υποστηρίζει αύξηση και μείωση, κι έτσι αν έχεις το 'a' μπορείς να πάρεις το 'b' προσθέτοντας ένα.

'a' + 5
# => 'f'

'z' - 25
# => 'a'

Υπάρχει επίσης μια μέθοδος που ονομάζεται Char#succ, η οποία επιστρέφει το επόμενο char στον πίνακα Unicode, και η Char#pred, η οποία επιστρέφει το προηγούμενο char στον πίνακα Unicode.

'a'.succ
# => 'b'

'z'.pred
# => 'y'

Συνένωση

Επειδή το Char προορίζεται να αναπαριστά μόνο ένα σημείο Unicode 32 bit, δύο chars δεν μπορούν να συνενωθούν. Επομένως, τα Chars μπορούν να συνενωθούν μόνο με συμβολοσειρές.

'a' + "bc"
# => "abc"

'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char

Μέθοδοι ιδιοτήτων

Η Crystal έχει μερικές μεθόδους για να παίρνεις πληροφορίες για έναν χαρακτήρα, όπως αν είναι αριθμός ή γράμμα ή αν είναι πεζός ή κεφαλαίος. Ακολουθεί μια λίστα με μερικές από τις μεθόδους, για την πλήρη λίστα δες το Char API:

Μέθοδος Περιγραφή
Char#number? Επιστρέφει true αν το Char είναι αριθμός
Char#letter? Επιστρέφει true αν το Char είναι γράμμα
Char#lowercase? Επιστρέφει true αν το Char είναι πεζό
Char#uppercase? Επιστρέφει true αν το Char είναι κεφαλαίο
Char#ascii? Επιστρέφει true αν το Char είναι χαρακτήρας ASCII
Char#whitespace? Επιστρέφει true αν το Char είναι χαρακτήρας κενού

Μετατροπή

Μετατροπή μεταξύ σημείων κώδικα και Chars

Επειδή το Char είναι ένα σημείο Unicode 32 bit, μπορείς να μετατρέψεις μεταξύ Chars και σημείων κώδικα (Int). Αυτό μπορεί να γίνει με τη μέθοδο Char#ord, η οποία θα επιστρέψει το σημείο κώδικα του Char, ή με τη μέθοδο Int#chr, η οποία θα επιστρέψει το Char του σημείου κώδικα.

'a'.ord
# => 97

97.chr
# => 'a'

Μετατροπή μεταξύ τύπων

Όπως και με τους άλλους τύπους δεδομένων, τα chars έχουν μερικές μεθόδους για μετατροπή μεταξύ τύπων. Η πιο συνηθισμένη είναι η μέθοδος Char#to_s, η οποία μετατρέπει το Char σε συμβολοσειρά. Ωστόσο, υπάρχει επίσης η μέθοδος Char#to_i, η οποία μετατρέπει το Char σε Int, και η μέθοδος Char#to_f, η οποία μετατρέπει το Char σε Float.

'a'.to_s
# => "a"

'4'.to_i
# => 4

'a'.to_i
# => Error: Invalid integer: a (ArgumentError)

Οδηγίες

Η βιβλιοθήκη του Luton είναι μια μεγάλη βιβλιοθήκη με μια μεγάλη συλλογή λογοτεχνίας, που περιλαμβάνει από βιβλία μέχρι τέχνη. Η βιβλιοθήκη έχει ένα τμήμα όπου μελετούν τη λογοτεχνία και προσθέτουν βιβλία στο σύστημα του υπολογιστή.

Κάποια κομμάτια στοχεύουν να αυτοματοποιηθούν και σου ζητείται να βοηθήσεις. Αυτό περιλαμβάνει από την αυτοματοποίηση των φορμών της διαδικασίας εγγραφής μέχρι τη βοήθεια στην αποκρυπτογράφηση κειμένων.

1. Βρες το πρώτο γράμμα του τίτλου

Τα βιβλία μιας βιβλιοθήκης υποτίθεται ότι είναι εύκολο να βρεθούν, γι' αυτό ταξινομούνται με βάση το πρώτο γράμμα του τίτλου.

Υλοποίησε τη μέθοδο Library.first_letter, η οποία παίρνει ένα όρισμα title, που περιέχει τον τίτλο του βιβλίου. Η μέθοδος πρέπει να επιστρέφει το πρώτο γράμμα του τίτλου.

Library.first_letter("Mystery of the Crystal Skull")
# => 'M'

2. Βρες τα αρχικά του συγγραφέα

Η βιβλιοθήκη έχει πολλά βιβλία γραμμένα από διαφορετικούς συγγραφείς. Οι συγγραφείς αναφέρονται συχνά με τα αρχικά τους, γι' αυτό η βιβλιοθήκη ζήτησε ένα σύστημα που δίνει τα αρχικά του συγγραφέα εισάγοντας το όνομα και το επώνυμο του συγγραφέα. Τα αρχικά πρέπει να έχουν τη μορφή: {first_letter_of_first_name}.{first_letter_of_last_name}

Υλοποίησε τη μέθοδο Library.initials που παίρνει δύο ορίσματα first_name και last_name, τα οποία περιέχουν το όνομα και το επώνυμο του συγγραφέα. Η μέθοδος πρέπει να επιστρέφει τα αρχικά του συγγραφέα.

Library.initials("William", "Shakespeare")
# => "W.S"

3. Αποκρυπτογράφησε ένα γράμμα

Κάποια λογοτεχνία είναι κρυπτογραφημένη και η βιβλιοθήκη έχει πολλά κρυπτογραφημένα κείμενα. Η βιβλιοθήκη θα ήθελε ένα νέο σύστημα αποκρυπτογράφησης για ειδική κρυπτογράφηση.

Η κρυπτογράφηση λειτουργεί παίρνοντας το γράμμα και αντικαθιστώντας το με το γράμμα που προηγείται στο αλφάβητο. Για παράδειγμα, το a γίνεται z, το b γίνεται a, το c γίνεται b, και ούτω καθεξής.

Η βιβλιοθήκη θα ήθελε να μπορεί να αποκρυπτογραφεί και κεφαλαία και πεζά γράμματα, διατηρώντας την ίδια γραφή με το αρχικό γράμμα.

Υλοποίησε τη μέθοδο Library.decrypt_character, η οποία παίρνει ένα όρισμα character, που περιέχει το γράμμα προς αποκρυπτογράφηση. Η μέθοδος πρέπει να επιστρέφει το αποκρυπτογραφημένο γράμμα.

Library.decrypt_character('a')
# => 'z'

4. Αποκρυπτογράφησε ένα κείμενο

Η βιβλιοθήκη θα ήθελε επίσης να αποκρυπτογραφεί ένα ολόκληρο κείμενο, με την κρυπτογράφηση που παίρνει το προηγούμενο γράμμα στο αλφάβητο.

Ο αποκρυπτογραφητής πρέπει να αποκρυπτογραφεί μόνο γράμματα και να αφήνει όλους τους άλλους χαρακτήρες ως έχουν.

Υλοποίησε τη μέθοδο Library.decrypt_text, η οποία παίρνει ένα όρισμα text, που περιέχει το κείμενο προς αποκρυπτογράφηση. Η μέθοδος πρέπει να επιστρέφει το αποκρυπτογραφημένο κείμενο.

Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Crystal Exercism

Έτοιμος να ξεκινήσεις την άσκηση Η βιβλιοθήκη του Luton;

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