Διαδρομές
/
Elixir
Elixir
/
Ασκήσεις
/
Κάβα κρασιών
Κάβα κρασιών

Κάβα κρασιών

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

Εισαγωγή

Λίστες λέξεων-κλειδιών

Οι λίστες λέξεων-κλειδιών είναι μια δομή δεδομένων με ζεύγη κλειδιού-τιμής.

[month: "April", year: 2018]

Οι λίστες λέξεων-κλειδιών είναι λίστες από πλειάδες {key, value} και μπορούν να γραφτούν και έτσι, αλλά η συντομότερη σύνταξη χρησιμοποιείται ευρύτερα.

[month: "April"] == [{:month, "April"}]
# => true

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

Μπορείς να δουλέψεις με τις λίστες λέξεων-κλειδιών με τους ίδιους τρόπους που χρησιμοποιείς και για τις λίστες, ή μπορείς να χρησιμοποιήσεις το module Keyword.

Οδηγίες

Είσαι ο διευθυντής ενός κομψού εστιατορίου με μια αρκετά μεγάλη κάβα κρασιών. Πολλοί από τους πελάτες σου είναι απαιτητικοί λάτρεις του κρασιού. Το να βρεις το κατάλληλο μπουκάλι κρασί για έναν συγκεκριμένο πελάτη δεν είναι εύκολη υπόθεση.

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

1. Εξήγησε τα χρώματα του κρασιού

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

Υλοποίησε τη συνάρτηση WineCellar.explain_colors/0. Δεν παίρνει ορίσματα και επιστρέφει μια λίστα λέξεων-κλειδιών με τα χρώματα του κρασιού ως κλειδιά και τις επεξηγήσεις ως τιμές.

Χρώμα Επεξήγηση
:white Fermented without skin contact.
:red Fermented with skin contact using dark-colored grapes.
:rose Fermented with some skin contact, but not enough to qualify as a red wine.

2. Πάρε όλα τα κρασιά ενός δεδομένου χρώματος

Ένα μπουκάλι κρασί αναπαρίσταται ως μια τριάδα με την ποικιλία σταφυλιού, το έτος και τη χώρα προέλευσης. Τα κρασιά αποθηκεύονται ανά χρώμα κρασιού σε μια λίστα λέξεων-κλειδιών.

[
  white: {"Chardonnay", 2015, "Italy"},
  white: {"Pinot grigio", 2017, "Germany"},
  red: {"Pinot noir", 2016, "France"},
  rose: {"Dornfelder", 2018, "Germany"}
]

Υλοποίησε τη συνάρτηση WineCellar.filter/3. Πρέπει να παίρνει μια λίστα λέξεων-κλειδιών με κρασιά, ένα άτομο χρώματος και μια λίστα λέξεων-κλειδιών με επιλογές, με προεπιλεγμένη τιμή []. Η συνάρτηση πρέπει να επιστρέφει μια λίστα με τα κρασιά ενός δεδομένου χρώματος.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white
)

# => [
#      {"Chardonnay", 2015, "Italy"},
#      {"Pinot grigio", 2017, "Germany"}
#    ]

3. Πάρε όλα τα κρασιά ενός δεδομένου χρώματος που εμφιαλώθηκαν ένα δεδομένο έτος

Επέκτεινε τη συνάρτηση WineCellar.filter/3. Όταν της δίνεται η επιλογή :year, η συνάρτηση πρέπει να επιστρέφει μια λίστα με τα κρασιά ενός δεδομένου χρώματος από ένα δεδομένο έτος.

Χρησιμοποίησε τη συνάρτηση WineCellar.filter_by_year/2, η οποία έχει ήδη υλοποιηθεί. Παίρνει ως ορίσματα μια λίστα με κρασιά και ένα έτος και επιστρέφει μια λίστα με τα κρασιά ενός δεδομένου έτους.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015
)

# => [
#      {"Chardonnay", 2015, "Italy"}
#    ]

4. Πάρε όλα τα κρασιά ενός δεδομένου χρώματος που εμφιαλώθηκαν σε μια δεδομένη χώρα

Επέκτεινε τη συνάρτηση WineCellar.filter/3. Όταν της δίνεται η επιλογή :country, η συνάρτηση πρέπει να επιστρέφει μια λίστα με τα κρασιά ενός δεδομένου χρώματος από μια δεδομένη χώρα.

Χρησιμοποίησε τη συνάρτηση WineCellar.filter_by_country/2, η οποία έχει ήδη υλοποιηθεί. Παίρνει ως ορίσματα μια λίστα με κρασιά και μια χώρα και επιστρέφει μια λίστα με τα κρασιά μιας δεδομένης χώρας.

Βεβαιώσου ότι η συνάρτηση δουλεύει όταν της δίνονται και οι δύο επιλογές, :year και :country, με οποιαδήποτε σειρά.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015,
  country: "Germany"
)

# => []
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Elixir Exercism

Έτοιμος να ξεκινήσεις την άσκηση Κάβα κρασιών;

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