Διαδρομές
/
JavaScript
JavaScript
/
Ασκήσεις
/
Ανάμεικτοι χυμοί
Ανάμεικτοι χυμοί

Ανάμεικτοι χυμοί

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

Εισαγωγή

Βρόχοι while

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

while (condition) {
  // code that is executed repeatedly as long as the condition is true
}

Η JavaScript έχει επίσης έναν βρόχο do-while. Εδώ η συνθήκη ελέγχεται αφού εκτελεστεί το σώμα του βρόχου. Αυτό είναι χρήσιμο όταν η συνθήκη εξαρτάται από υπολογισμούς που γίνονται στο σώμα.

do {
  // The code here will always be executed once and then
  // repeatedly while the condition is true.
} while (condition);

Μέσα στο σώμα ενός βρόχου, μπορείς να χρησιμοποιήσεις τη λέξη-κλειδί break για να σταματήσεις εντελώς την εκτέλεση του βρόχου. Σε αντίθεση με αυτό, η λέξη-κλειδί continue σταματά μόνο την εκτέλεση της τρέχουσας επανάληψης και συνεχίζει με την επόμενη. Με το continue μπορείς συχνά να αποφύγεις να τυλίξεις μεγάλα τμήματα του σώματος του βρόχου σε μια εντολή if.

let i = 0;

while (i < 100) {
  i = i + 2;

  if (i % 3 === 0) {
    continue;
  }

  // The code here will only be executed when i was not divisible
  // by 3 in the check above.
}

Εντολές switch

Εκτός από την εντολή if, η JavaScript έχει επίσης μια εντολή switch για να εκτελείς λογική υπό συνθήκες. Χρησιμοποιείται όταν μια μεμονωμένη μεταβλητή πρέπει να συγκριθεί με πολλαπλές παραλλαγές. Η σύγκριση γίνεται ελέγχοντας την αυστηρή ισότητα (===), δες τη σύγκριση εννοιών. Για κάποια μεταβλητή x, η εντολή switch στην JavaScript έχει την εξής σύνταξη.

switch (x) {
  case option1:
    // code that is executed when "x === option1" is true
    break;
  case option2:
    // code that is executed when "x === option2" is true
    break;
  default:
    // code that is executed when x does not equal any of the options
}

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

Οι παραπάνω εντολές break είναι απαραίτητες, γιατί από προεπιλογή όλες οι περιπτώσεις είναι "fallthrough" στην JavaScript. Αυτό σημαίνει ότι χωρίς καμία εντολή break θα εκτελούνταν όλος ο κώδικας στις περιπτώσεις που βρίσκονται μετά την πρώτη επιλογή που ταιριάζει, ακόμη κι αν το x δεν ταίριαζε με αυτές τις επιλογές. Αυτή η συμπεριφορά "fallthrough" από προεπιλογή είναι μια συνηθισμένη παγίδα όταν χρησιμοποιείς το switch στην JavaScript. Μέσα σε μια συνάρτηση, μπορείς να χρησιμοποιήσεις το return αντί για το break για να αποφύγεις αυτό το πρόβλημα.

Οδηγίες

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

1. Υπολόγισε πόση ώρα χρειάζεται για να φτιαχτεί ένας χυμός

Στη Li Mei αρέσει να λέει στους πελάτες της εκ των προτέρων πόσο θα περιμένουν για έναν χυμό από το μενού που παρήγγειλαν. Δυσκολεύεται να θυμάται τους ακριβείς αριθμούς, γιατί ο χρόνος που χρειάζεται για να φτιαχτούν οι χυμοί ποικίλλει. Ο 'Pure Strawberry Joy' θέλει 0,5 λεπτά, οι 'Energizer' και 'Green Garden' θέλουν 1,5 λεπτό ο καθένας, ο 'Tropical Island' θέλει 3 λεπτά και ο 'All or Nothing' θέλει 5 λεπτά. Για όλα τα άλλα ποτά (π.χ. ειδικές προσφορές) μπορείς να υποθέσεις χρόνο προετοιμασίας 2,5 λεπτά.

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

timeToMixJuice('Tropical Island');
// => 3

timeToMixJuice('Berries & Lime');
// => 2.5

2. Ανανέωσε το απόθεμα σε φέτες λάιμ

Πολλές από τις δημιουργίες της Li Mei περιλαμβάνουν φέτες λάιμ, είτε ως συστατικό είτε ως στολίδι. Έτσι, όταν ξεκινά τη βάρδιά της το πρωί, πρέπει να σιγουρευτεί ότι το δοχείο με τις φέτες λάιμ είναι γεμάτο για την ημέρα που έρχεται.

Υλοποίησε τη συνάρτηση limesToCut, η οποία παίρνει τον αριθμό των φετών λάιμ που πρέπει να κόψει η Li Mei και έναν πίνακα που αντιπροσωπεύει το απόθεμα σε ολόκληρα λάιμ που έχει διαθέσιμα. Από ένα λάιμ 'small' μπορεί να πάρει 6 φέτες, από ένα 'medium' 8 φέτες και από ένα 'large' 10. Πάντα κόβει τα λάιμ με τη σειρά που εμφανίζονται στη λίστα, ξεκινώντας από το πρώτο στοιχείο. Συνεχίζει μέχρι να φτάσει στον αριθμό των φετών που χρειάζεται ή μέχρι να ξεμείνει από λάιμ.

Η Li Mei θα ήθελε να ξέρει εκ των προτέρων πόσα λάιμ πρέπει να κόψει. Η συνάρτηση limesToCut πρέπει να επιστρέφει τον αριθμό των λάιμ που πρέπει να κοπούν.

limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4

3. Τελείωσε τη βάρδια

Η Li Mei δουλεύει πάντα μέχρι τις 3 το μεσημέρι. Μετά την αντικαθιστά ο υπάλληλός της, ο Dmitry. Συχνά υπάρχουν ποτά που έχουν παραγγελθεί αλλά δεν έχουν ετοιμαστεί ακόμα όταν τελειώνει η βάρδια της Li Mei. Τότε ο Dmitry ετοιμάζει τους υπόλοιπους χυμούς.

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

Ο χρόνος που απομένει στη βάρδια θα είναι πάντα μεγαλύτερος από 0. Ο πίνακας με τους χυμούς προς ετοιμασία δεν θα είναι ποτέ άδειος. Επιπλέον, οι παραγγελίες ετοιμάζονται με τη σειρά που εμφανίζονται στον πίνακα. Αν η Li Mei ξεκινήσει να φτιάχνει έναν συγκεκριμένο χυμό, θα τον τελειώσει πάντα, ακόμα κι αν χρειαστεί να δουλέψει λίγο παραπάνω. Αν δεν έχουν μείνει παραγγελίες που πρέπει να αναλάβει ο Dmitry, πρέπει να επιστραφεί ένας κενός πίνακας.

remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
JavaScript Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ανάμεικτοι χυμοί;

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