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

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

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

Εισαγωγή

Υπάρχουν βασικά δύο τύποι βρόχων:

  1. Επανάληψη μέχρι να ικανοποιηθεί μια συνθήκη.
  2. Επανάληψη πάνω από τα στοιχεία μιας συλλογής.

Και οι δύο είναι εφικτοί στη Julia, αν και ο δεύτερος μπορεί να είναι πιο συνηθισμένος.

Ο βρόχος while

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

Η βασική μορφή είναι αρκετά απλή:

while condition
    do_something()
end

Σε αυτή την περίπτωση, το πρόγραμμα θα συνεχίσει να γυρίζει τον βρόχο μέχρι το condition να μην είναι πλέον true.

Υπάρχουν δύο τρόποι για να βγεις νωρίς από τον βρόχο:

  • Ένα break προκαλεί την έξοδο από τον βρόχο, με την εκτέλεση να συνεχίζεται στην επόμενη γραμμή μετά το end του βρόχου.
  • Ένα return x σταματά την εκτέλεση της τρέχουσας συνάρτησης, περνώντας την τιμή επιστροφής x πίσω στον καλούντα.

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

Επανάληψη πάνω από μια συλλογή

Το πιο απλό παράδειγμα είναι η επανάληψη πάνω από ένα εύρος.

Αν θέλεις να κάνεις κάτι 10 φορές:

for n in 1:10
    do_something(n)
end

Αν η τρέχουσα επανάληψη δεν ικανοποιεί κάποια συνθήκη, μπορείς να περάσεις αμέσως στην επόμενη επανάληψη με ένα continue:

for n in 1:10
    if is_useless(n)
        continue
    end
    
    # we decided this iteration could be useful
    do_something_slow(n)
end

Σε συντομότερη μορφή, το μπλοκ if θα μπορούσε να αντικατασταθεί από is_useless(n) && continue.

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

Τα παραδείγματα μέχρι τώρα κάνουν επανάληψη πάνω από το εύρος 1:10, όπου η τιμή είναι ταυτόχρονα και η θέση του βρόχου.

Γενικότερα, μπορεί να χρειάζεσαι τη θέση και όχι μόνο την τιμή. Γι' αυτό χρησιμοποιείς τη συνάρτηση eachindex(), για παράδειγμα for i in eachindex(my_array) ... end.

Οδηγίες

Η φίλη σου η 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 λεπτά.

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

julia> time_to_mix_juice("Tropical Island")
3

julia> time_to_mix_juice("Berries & Lime")
2.5

2. Αναπλήρωσε το απόθεμα από φέτες μοσχολέμονου

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

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

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

julia> limes_to_cut(25, ["small", "small", "large", "medium", "small"])
4

3. Κατέγραψε τους χρόνους ανάμειξης κάθε παραγγελίας στην ουρά

Στη Li Mei αρέσει να παρακολουθεί πόσο χρόνο θα πάρει η ανάμειξη των παραγγελιών που περιμένουν οι πελάτες.

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

julia> order_times(["Energizer", "Tropical Island"])
[1.5, 3.0]

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

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

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

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

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

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

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