Λαζάνια

Λαζάνια

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

Εισαγωγή

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

Η Julia είναι μια δυναμική γλώσσα προγραμματισμού με ισχυρή τυποποίηση. Το στυλ προγραμματισμού είναι κυρίως συναρτησιακό, αν και με μεγαλύτερη ευελιξία απ' ό,τι σε γλώσσες όπως η Haskell.

Μεταβλητές και ανάθεση

Δεν χρειάζεται να δηλώσεις μια μεταβλητή εκ των προτέρων. Απλώς ανάθεσε μια τιμή σε ένα κατάλληλο όνομα:

julia> myvar = 42  # an integer
42

julia> name = "Maria"  # strings are surrounded by double-quotes ""
"Maria"

Σταθερές

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

Αν βάλεις τη λέξη-κλειδί const στην αρχή μιας ανάθεσης, ο μεταγλωττιστής μπορεί να παράγει πιο αποδοτικό κώδικα απ' ό,τι είναι εφικτό για μια μεταβλητή.

Οι σταθερές σε βοηθούν επίσης να προστατεύεσαι από λάθη στον προγραμματισμό. Αν κατά λάθος προσπαθήσεις να αλλάξεις την τιμή μιας const, θα λάβεις μια προειδοποίηση:

julia> const answer = 42
42

julia> answer = 24
WARNING: redefinition of constant Main.answer. This may fail, cause incorrect answers, or produce other errors.
24

Σημείωσε ότι μια const μπορεί να δηλωθεί μόνο έξω από οποιαδήποτε συνάρτηση. Αυτό συνήθως γίνεται κοντά στην αρχή του αρχείου *.jl, πριν από τους ορισμούς των συναρτήσεων.

Αριθμητικοί τελεστές

Είναι ίδιοι με αυτούς σε πολλές άλλες γλώσσες:

2 + 3  # 5 (addition)
2 - 3  # -1 (subtraction)
2 * 3  # 6 (multiplication)
8 / 2  # 4.0 (division with floating-point result)
8 % 3  # 2 (remainder)

Συναρτήσεις

Υπάρχουν δύο συνηθισμένοι τρόποι για να ορίσεις μια επώνυμη συνάρτηση στη Julia:

  1. Χρησιμοποιώντας τη λέξη-κλειδί function

    function muladd(x, y, z)
        x * y + z
    end
    

    Η στοίχιση με 4 κενά είναι συμβατική για λόγους αναγνωσιμότητας, αλλά ο μεταγλωττιστής την αγνοεί. Η λέξη-κλειδί end είναι απαραίτητη.

    Σημείωσε ότι θα μπορούσαμε να γράψουμε return x * y + z. Ωστόσο, οι συναρτήσεις στη Julia επιστρέφουν πάντα την τελευταία έκφραση που αξιολογήθηκε, οπότε η λέξη-κλειδί return είναι προαιρετική. Πολλοί προγραμματιστές προτιμούν να τη βάζουν, ώστε να είναι πιο ξεκάθαρες οι προθέσεις τους.

  2. Χρησιμοποιώντας τη "μορφή ανάθεσης"

    muladd(x, y, z) = x * y + z
    

    Αυτή χρησιμοποιείται συνήθως για σύντομες συναρτήσεις με μία μόνο έκφραση.

    Στη μορφή ανάθεσης δεν χρησιμοποιείται ποτέ η λέξη-κλειδί return.

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

Για να καλέσεις μια συνάρτηση, γράφεις το όνομά της και περνάς ορίσματα για κάθε παράμετρο της συνάρτησης:

# invoking a function
muladd(10, 5, 1)

# and of course you can invoke a function within the body of another function:
square_plus_one(x) = muladd(x, x, 1)

Συμβάσεις ονοματοδοσίας

Όπως πολλές γλώσσες, η Julia απαιτεί τα ονόματα (μεταβλητών, συναρτήσεων και πολλών άλλων) να ξεκινούν με ένα γράμμα και να συνεχίζουν με οποιονδήποτε συνδυασμό γραμμάτων, ψηφίων και κάτω παύλας.

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

Οδηγίες

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

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

1. Αποθήκευσε τον αναμενόμενο χρόνο ψησίματος σε μια σταθερά

Όρισε τη σταθερά expected_bake_time που επιστρέφει πόσα λεπτά πρέπει να ψηθεί η λαζάνια στον φούρνο.

Σύμφωνα με το βιβλίο μαγειρικής, η λαζάνια πρέπει να μείνει στον φούρνο συνολικά 60 λεπτά.

julia> expected_bake_time
60

2. Υπολόγισε τον χρόνο προετοιμασίας σε λεπτά

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

julia> preparation_time(4)
8

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

Όρισε τη συνάρτηση remaining_time που παίρνει ως παράμετρο τα πραγματικά λεπτά που βρίσκεται η λαζάνια στον φούρνο και επιστρέφει πόσα λεπτά πρέπει ακόμα να μείνει η λαζάνια στον φούρνο.

julia> remaining_time(50)
10

4. Υπολόγισε τον συνολικό χρόνο εργασίας σε λεπτά

Όρισε τη συνάρτηση total_working_time που παίρνει δύο ορίσματα: το πρώτο όρισμα είναι ο αριθμός των στρώσεων που πρόσθεσες στη λαζάνια και το δεύτερο όρισμα είναι ο αριθμός των λεπτών που βρίσκεται η λαζάνια στον φούρνο.

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

julia> total_working_time(3, 20)
26
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Julia Exercism

Έτοιμος να ξεκινήσεις την άσκηση Λαζάνια;

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