Διαδρομές
/
Julia
Julia
/
Ασκήσεις
/
Τα μαγικά της Elyse
Τα μαγικά της Elyse

Τα μαγικά της Elyse

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

Εισαγωγή

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

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

Οι πίνακες μπορούν να έχουν αυθαίρετο μέγεθος (με μόνο περιορισμό τη μνήμη του υλικού σου) και αυθαίρετα πολλές διαστάσεις.

Αυτή η εισαγωγική έννοια επικεντρώνεται στα βασικά των μονοδιάστατων πινάκων, που ονομάζονται Vector.

Δημιουργία Vector

Στη Julia, ένα Vector είναι μια διατεταγμένη ακολουθία τιμών, στις οποίες μπορείς να έχεις πρόσβαση με αριθμό θέσης.

Ο απλούστερος τρόπος για να δημιουργήσεις ένα Vector είναι να απαριθμήσεις τις τιμές μέσα σε αγκύλες:

julia> num_vec = [1, 4, 9]
3-element Vector{Int64}:
 1
 4
 9

julia> str_vec = ["arrays", "are", "important"]
3-element Vector{String}:
 "arrays"
 "are"
 "important"

Ο τύπος Vector ταιριάζει με τον τύπο κάθε στοιχείου.

Άρα τα Vector πρέπει να είναι ομογενή (όλα τα στοιχεία ίδιου τύπου);

Σε κάποιο βαθμό, ναι, και συνιστάται να το επιδιώκεις αυτό, αν θέλεις την καλύτερη απόδοση. Ωστόσο, η Julia μπορεί να παρακάμψει αυτόν τον περιορισμό (όταν χρειάζεται) χρησιμοποιώντας τον τύπο Any:

julia> mixed_vector = [1, "str", 'c']
3-element Vector{Any}:
 1
  "str"
  'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)

Όταν δημιουργείς ένα κενό Vector, η Julia χρησιμοποιεί από προεπιλογή τον τύπο στοιχείου Any, αλλά αυτό μπορεί να οριστεί πιο συγκεκριμένα, δηλώνοντας τον κενό πίνακα με τον επιθυμητό τύπο στοιχείου.

julia> empty_vec = []
Any[]

julia> empty_int_vec = Int64[]
Int64[]

Διάβασε και θυμήσου αυτόν τον κανόνα:

  • Από προεπιλογή, η προσπέλαση με θέση στη Julia ξεκινά από το 1, όχι από το 0.

Αυτό είναι οικείο σε όποιον έχει χρησιμοποιήσει άλλες γλώσσες επιστήμης δεδομένων (R, Matlab, Fortran...), αλλά μπορεί να φαίνεται σοκαριστικό σε επιστήμονες υπολογιστών με υπόβαθρο σε γλώσσες τύπου C.

Κατά τα άλλα, οι θέσεις λειτουργούν όπως ίσως μαντεύεις: απλώς βάλ' τες μέσα σε αγκύλες:

squares = [0, 1, 4, 9, 16]
squares[1]  # 0
squares[3]  # 4
squares[begin]  # 0 ("begin" is synonym for 1)
squares[end]  # 16 ("end" is synonym for length(squares))

Πρόσεξε την ευκολία της προσπέλασης με end (που είναι πολύ χρήσιμη) και begin (που μάλλον δεν είναι).

Οι προγραμματιστές Python ίσως αναρωτιούνται για τις αρνητικές θέσεις. Μην το κάνεις: δεν υπάρχουν στη Julia και θα πετάξουν ένα BoundsError, όπως και οποιαδήποτε θέση μικρότερη από το 1 ή μεγαλύτερη από το length(squares).

Λειτουργίες με Vector

Τα Vector στη Julia είναι μεταβλητά: μπορούμε να αλλάξουμε το περιεχόμενο μεμονωμένων κελιών.

julia> vals = [1, 3, 5, 7]
4-element Vector{Int64}:
 1
 3
 5
 7

julia> vals[2] = 4  # reassign the value of this element
4

# Only the value at position 2 changes:
julia> vals
4-element Vector{Int64}:
 1
 4
 5
 7

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

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

Αυτές είναι μερικές από τις χρήσιμες συναρτήσεις:

  • Για να προσθέσεις τιμές στο τέλος του Vector, χρησιμοποίησε την push!().
  • Για να αφαιρέσεις την τελευταία τιμή, χρησιμοποίησε την pop!().
  • Για να επέμβεις στην αρχή του Vector, οι αντίστοιχες συναρτήσεις είναι οι pushfirst!() και popfirst!().
  • Για να εισαγάγεις ή να αφαιρέσεις ένα στοιχείο σε οποιαδήποτε θέση, υπάρχουν οι insert!() και deleteat!().
julia> vals = [1, 3]
2-element Vector{Int64}:
 1
 3

julia> push!(vals, 5, 6)  # can add multiple values
4-element Vector{Int64}:
 1
 3
 5
 6

julia> pop!(vals)  # mutates vals, return popped value
6

julia> vals
3-element Vector{Int64}:
 1
 3
 5

Οδηγίες

Ως επίδοξη μάγισσα, η Elyse χρειάζεται να εξασκηθεί σε μερικά βασικά. Έχει μια στοίβα κάρτες που θέλει να χειριστεί.

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

1. Πάρε μια κάρτα από τη στοίβα

Για να διαλέξεις μια κάρτα, επέστρεψε την κάρτα στη θέση position από τη στοίβα που σου δίνεται.

julia> stack = [1, 2, 4, 1];
julia> position = 3;
julia> get_item(stack, position)
4

2. Αντάλλαξε μια κάρτα στη στοίβα

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

julia> stack = [1, 2, 4, 1];
julia> position = 3;
julia> replacement_card = 6;
julia> set_item!(stack, position, replacement_card)
[1, 2, 6, 1]

3. Βάλε μια κάρτα στην κορυφή της στοίβας

Κάνε μια κάρτα να εμφανιστεί βάζοντας μια νέα κάρτα στην κορυφή της στοίβας. Επέστρεψε τη στοίβα με τις αλλαγές.

julia> stack = [5, 9, 7, 1];
julia> new_card = 8;
julia> insert_item_at_top!(stack, new_card)
[5, 9, 7, 1, 8]

4. Αφαίρεσε μια κάρτα από τη στοίβα

Κάνε μια κάρτα να εξαφανιστεί αφαιρώντας την κάρτα στη θέση position από τη στοίβα. Επέστρεψε τη στοίβα με τις αλλαγές.

julia> stack = [3, 2, 6, 4, 8];
julia> position = 3;
julia> remove_item!(stack, position)
[3, 2, 4, 8]

5. Αφαίρεσε την πάνω κάρτα από τη στοίβα

Κάνε μια κάρτα να εξαφανιστεί αφαιρώντας την κάρτα στην κορυφή της στοίβας. Επέστρεψε τη στοίβα με τις αλλαγές.

julia> stack = [3, 2, 6, 4, 8];
julia> remove_item_from_top!(stack)
[3, 2, 6, 4]

6. Βάλε μια κάρτα στο κάτω μέρος της στοίβας

Κάνε μια κάρτα να εμφανιστεί βάζοντας μια νέα κάρτα στο κάτω μέρος της στοίβας. Επέστρεψε τη στοίβα με τις αλλαγές.

julia> stack = [5, 9, 7, 1];
julia> new_card = 8;
julia> insert_item_at_bottom!(stack, new_card)
[8, 5, 9, 7, 1]

7. Αφαίρεσε μια κάρτα από το κάτω μέρος της στοίβας

Κάνε μια κάρτα να εξαφανιστεί αφαιρώντας την κάρτα στο κάτω μέρος της στοίβας. Επέστρεψε τη στοίβα με τις αλλαγές.

julia> stack = [8, 5, 9, 7, 1];
julia> remove_item_at_bottom!(stack)
[5, 9, 7, 1]

8. Έλεγξε το μέγεθος της στοίβας

Έλεγξε αν το μέγεθος της στοίβας είναι ίσο με stack_size ή όχι.

julia> stack = [3, 2, 6, 4, 8];
julia> stack_size = 4;
julia> check_size_of_stack(stack, stack_size)
false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Julia Exercism

Έτοιμος να ξεκινήσεις την άσκηση Τα μαγικά της Elyse;

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