Διαδρομές
/
Crystal
Crystal
/
Ασκήσεις
/
Ρομπότ πάρτι
Ρομπότ πάρτι

Ρομπότ πάρτι

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

Εισαγωγή

Η Crystal έχει έναν τύπο γνωστό ως String, που χρησιμοποιείται για να αναπαραστήσει κείμενο. Οι συμβολοσειρές της Crystal είναι ακολουθίες χαρακτήρων Unicode. Οι συμβολοσειρές είναι αμετάβλητες, που σημαίνει ότι δεν μπορούν να αλλάξουν μόλις δημιουργηθούν. Αυτό σημαίνει ότι δημιουργείται μια νέα συμβολοσειρά κάθε φορά που τροποποιείς μια συμβολοσειρά· επομένως, η αρχική συμβολοσειρά δεν τροποποιείται.

Για να ορίσεις μια συμβολοσειρά χρησιμοποιείς διπλά εισαγωγικά ".

"Hello World"

Συνένωση

Για να συνενώσεις δύο συμβολοσειρές, χρησιμοποίησε τον τελεστή +. Ο τελεστής + θα επιστρέψει μια νέα συμβολοσειρά που συνδυάζει τις δύο συμβολοσειρές.

hello = "Hello"
hello + " World"
# => "Hello World"

Μετατροπή μεταξύ συμβολοσειρών και αριθμών

Η μέθοδος to_i μετατρέπει μια συμβολοσειρά σε ακέραιο. Εναλλακτικά, η μέθοδος to_f μπορεί να χρησιμοποιηθεί για να επιστρέψει έναν αριθμό κινητής υποδιαστολής. Αν η συμβολοσειρά δεν μπορεί να μετατραπεί σε αριθμό, τότε θα πεταχτεί ένα ArgumentError.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

"Hello".to_i
# => ArgumentError: Invalid integer: Hello

Ένας ακέραιος ή ένας αριθμός κινητής υποδιαστολής μπορεί να μετατραπεί σε συμβολοσειρά χρησιμοποιώντας τη μέθοδο to_s.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Παρεμβολή

Η παρεμβολή είναι ένας βολικός τρόπος να συνδυάζεις συμβολοσειρές και να ενσωματώνεις εκφράσεις μέσα σε συμβολοσειρές. Για να κάνεις παρεμβολή σε μια συμβολοσειρά, μπορείς να χρησιμοποιήσεις τον χαρακτήρα # ακολουθούμενο από άγκιστρα {} με την έκφραση μέσα στα άγκιστρα.

name = "World"
"Hello #{name}!"
# => "Hello World!"

Η Crystal θα μετατρέψει αυτόματα το αποτέλεσμα της έκφρασης σε συμβολοσειρά.

"Hello #{1 + 1}!"
# => "Hello 2!"

Μέγεθος

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

"Hello World".size
# => 11

Προσπέλαση με θέση

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

Note

Το [] υλοποιείται ως μέθοδος στιγμιοτύπου της String, όπου η θέση είναι το όρισμα της μεθόδου.

Ο πρώτος χαρακτήρας σε μια συμβολοσειρά βρίσκεται στη θέση 0.

"Hello World"[0]
# => 'H'

"Hello World"[6]
# => 'W'

Για να πάρεις έναν χαρακτήρα από το τέλος μιας συμβολοσειράς, μπορείς να πάρεις το μήκος της συμβολοσειράς μείον ένα για να βρεις τη θέση του τελευταίου χαρακτήρα, και για να πάρεις τον προτελευταίο χαρακτήρα, μπορείς να πάρεις το μήκος της συμβολοσειράς μείον δύο, και ούτω καθεξής. Υπάρχει ένας συντομότερος τρόπος για αυτό, και είναι απλώς να χρησιμοποιήσεις μια αρνητική θέση, όπου ο τελευταίος χαρακτήρας βρίσκεται στη θέση -1, ο προτελευταίος χαρακτήρας στη θέση -2, και ούτω καθεξής.

name = "Hello World"
name[name.size - 1]
# => 'd'

name[-1]
# => 'd'

Χαρακτήρες διαφυγής

Κάποιοι χαρακτήρες δεν μπορούν να γραφτούν απευθείας σε μια συμβολοσειρά· αντ' αυτού, πρέπει να χρησιμοποιήσεις μια ακολουθία διαφυγής. Για παράδειγμα, αν θέλεις να χρησιμοποιήσεις διπλά εισαγωγικά μέσα σε μια συμβολοσειρά, πρέπει να κάνεις διαφυγή στα διπλά εισαγωγικά. Μπορείς να χρησιμοποιήσεις τον χαρακτήρα \ για να γράψεις μια ακολουθία διαφυγής, ακολουθούμενη από τον χαρακτήρα που θέλεις να κάνεις διαφυγή.

Αυτοί είναι οι ειδικοί χαρακτήρες στην Crystal:

Τιμή Περιγραφή
\a Ειδοποίηση
\b Οπισθοχώρηση
\e Διαφυγή
\f Αλλαγή σελίδας
\n Αλλαγή γραμμής ή νέα γραμμή
\r Επιστροφή καροτσιού
\t Οριζόντιος στηλοθέτης
\v Κατακόρυφος στηλοθέτης
\\ Ανάποδη κάθετος
\' Απλό εισαγωγικό
\" Διπλό εισαγωγικό
\377 Οκταδικός χαρακτήρας ASCII
\xFF Δεκαεξαδικός χαρακτήρας ASCII
\uFFFF Δεκαεξαδικός χαρακτήρας Unicode
puts "Hello \"World\""
# => Hello "World"

puts "Hello \nWorld"
# => Hello
# => World

Πολυγραμμικές συμβολοσειρές

Για να γράψεις μια πολυγραμμική συμβολοσειρά, χρησιμοποιείς την ίδια σύνταξη όπως σε μια συμβολοσειρά μιας γραμμής, αλλά αλλάζεις γραμμή για κάθε γραμμή που θέλεις να περιέχει η συμβολοσειρά.

"Hello
World"
# => "Hello\nWorld"

Οδηγίες

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

1. Καλωσόρισε έναν νέο καλεσμένο στο πάρτι

Υλοποίησε τη μέθοδο welcome ώστε να επιστρέφει ένα μήνυμα καλωσορίσματος χρησιμοποιώντας το όνομα που δίνεται:

PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!

2. Καλωσόρισε έναν νέο καλεσμένο στο πάρτι που έχει σήμερα τα γενέθλιά του

Υλοποίησε τη μέθοδο happy_birthday ώστε να επιστρέφει ένα μήνυμα γενεθλίων χρησιμοποιώντας το όνομα και την ηλικία του ατόμου που δίνονται. Δυστυχώς ο προγραμματιστής είναι λίγο επιδειξίας, οπότε το ρομπότ πρέπει να αποδεικνύει τη γνώση του για τα γενέθλια κάθε καλεσμένου.

PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!

3. Δώσε οδηγίες

Υλοποίησε τη συνάρτηση assign_table ώστε να δίνει οδηγίες. Θα πρέπει να δέχεται 5 παραμέτρους.

  • Το όνομα του νέου καλεσμένου που θα χαιρετήσεις (String)
  • Ο αριθμός του τραπεζιού (Int)
  • Το όνομα του διπλανού καλεσμένου (String)
  • Η κατεύθυνση όπου θα βρεις το τραπέζι (String)
  • Η απόσταση από το τραπέζι (Float64)

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

Το όνομα του διπλανού καλεσμένου θα πρέπει να συντομεύεται στο πρώτο και το τελευταίο γράμμα του ονόματος. Ο Frank γίνεται Fk, ο Christian γίνεται Cn, και ούτω καθεξής.

Το ρομπότ δίνει τον αριθμό του τραπεζιού. Το ρομπότ αναφέρει επίσης την απόσταση του τραπεζιού. Ευτυχώς, μόνο με ακρίβεια που περιορίζεται σε 1 ψηφίο.

PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Crystal Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ρομπότ πάρτι;

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