Ένα Set a είναι μια ακολουθία μοναδικών τιμών τύπου a.
Οι τιμές πρέπει να είναι του τύπου comparable (Int, Float, Time, Char, String, καθώς και πλειάδες ή λίστες από συγκρίσιμους τύπους).
Μπορείς να μετατρέπεις λίστες και σύνολα το ένα στο άλλο με τις Set.toList και Set.fromList.
Λόγω της εσωτερικής δομής του Set, είναι εγγυημένο ότι μια λίστα που προκύπτει από το Set.fromList θα είναι ταξινομημένη.
Set.fromList [2, 3, 3, 3, 1, 1, 2]
--> Set.fromList [1, 2, 3]
Set.toList (Set.fromList [2, 3, 3, 3, 1, 1, 2])
--> [1, 2, 3]
Μπορείς να δημιουργείς και να γεμίζεις σύνολα με τις Set.empty, Set.singleton, Set.insert και Set.remove.
Set.empty
--> Set.fromList []
Set.singleton "hi"
--> Set.fromList ["hi"]
eightyEight = Set.singleton 88
Set.insert 88 eightyEight
--> Set.fromList [88]
Set.insert 89 eightyEight
--> Set.fromList [88, 89]
Set.remove 88 eightyEight
--> Set.fromList []
Set.remove 89 eightyEight
--> Set.fromList [88]
Μπορείς να ελέγχεις τα περιεχόμενα ενός συνόλου με τις συναρτήσεις Set.member, Set.isEmpty και Set.size.
Set.member 88 eightyEight
--> True
Set.isEmpty eightyEight
--> False
Set.size eightyEight
--> 1
Το Set μπορεί να συνδυαστεί με τις Set.union, Set.intersect και Set.diff.
a = Set.fromList [1, 10, 100]
b = Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Set.union a b
--> Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
Set.intersect a b
--> Set.fromList [1, 10]
Set.diff a b
--> Set.fromList [100]
Set.diff b a
--> Set.fromList [2, 3, 4, 5, 6, 7, 8, 9]
Μπορείς να φιλτράρεις και να διαμερίσεις σύνολα.
even n = modBy 2 n == 0
Set.filter even b
--> Set.fromList [2, 4, 6, 8, 10]
Set.partition even b
--> (Set.fromList [2, 4, 6, 8, 10], Set.fromList [1, 3, 5, 7, 9])
Η νοσταλγία σου για τις κάρτες Blorkemon™️ δεν δείχνει σημάδια υποχώρησης, άρχισες μάλιστα να τις μαζεύεις ξανά και βάζεις και τους φίλους σου να συμμετέχουν.
Σε αυτή την άσκηση, μια συλλογή Card αναπαρίσταται με Set Card, αφού οι διπλότυπες κάρτες δεν έχουν σημασία όταν ο στόχος σου είναι να αποκτήσεις όλες τις υπάρχουσες κάρτες.
Θέλεις πραγματικά οι φίλοι σου να μπουν στην τρέλα σου με τα Blorkemon™️, και ο καλύτερος τρόπος είναι να ξεκινήσεις τη συλλογή τους χαρίζοντάς τους μία κάρτα.
Υλοποίησε τη newCollection, η οποία μετατρέπει μια κάρτα σε συλλογή.
newCollection "Newthree"
--> Set.fromList ["Newthree"]
Μόλις αποκτήσεις μια συλλογή, αυτή αποκτά δική της ζωή και πρέπει να μεγαλώσει.
Υλοποίησε τη addCard, η οποία παίρνει μια Card και μια συλλογή και επιστρέφει μια Tuple με δύο τιμές: μια Bool που δείχνει αν η Card ήταν ήδη στη συλλογή, και τη συλλογή με την κάρτα προσθεμένη.
addCard "Scientuna" (Set.fromList ["Newthree"])
--> (False, Set.fromList ["Newthree", "Scientuna"])
Τώρα που οι φίλοι σου έχουν ξανατρελαθεί με τα Blorkemon™️, μπορείς να το εκμεταλλευτείς για να μεγαλώσεις τη δική σου συλλογή ανταλλάσσοντας κάρτες.
Δεν αξίζει κάθε ανταλλαγή, ούτε είναι πάντα εφικτή. Δεν μπορείς να ανταλλάξεις μια κάρτα που δεν έχεις, και δεν πρέπει να ανταλλάξεις μια κάρτα με μια που έχεις ήδη.
Υλοποίησε τη tradeCard, η οποία παίρνει δύο κάρτες προς ανταλλαγή (τη δική σου και τη δική τους) και την τρέχουσα συλλογή σου.
Η τιμή επιστροφής είναι μια Tuple με δύο τιμές: μια Bool που δηλώνει αν η ανταλλαγή είναι εφικτή και αξίζει τον κόπο, και τη συλλογή με την οποία θα κατέληγες αν έκανες την ανταλλαγή (ακόμα κι αν στην πραγματικότητα δεν είναι εφικτή).
tradeCard "Scientuna" "Newthree" (Set.fromList ["Scientuna"])
--> (True, Set.fromList ["Newthree"])
Βρίσκεις έναν παλιό θησαυρό από κάρτες σε ένα παζάρι. Πρέπει να ταξινομήσεις τις κάρτες και να αφαιρέσεις τα διπλότυπα, για να συγκρίνεις τη λίστα με τη συλλογή σου.
Υλοποίησε τη removeDuplicates, η οποία ταξινομεί μια λίστα με κάρτες και επιστρέφει μια λίστα με ταξινομημένες, μοναδικές κάρτες.
removeDuplicates ["Newthree", "Newthree", "Newthree", "Scientuna"]
--> ["Newthree", "Scientuna"]
Ώρα να νιώσεις καλά για τη συλλογή σου.
Υλοποίησε τη extraCards, η οποία παίρνει τη συλλογή σου και κάποια άλλη συλλογή, και επιστρέφει τον αριθμό των καρτών που δεν έχει η άλλη συλλογή.
extraCards (Set.fromList ["Scientuna"]) (Set.fromList ["Newthree", "Scientuna"])
--> 0
Εσύ και οι φίλοι σου που λατρεύουν τα Blorkemon™️ μαζεύεστε και αναρωτιέστε ποιες κάρτες είναι οι πιο συνηθισμένες.
Υλοποίησε τη boringCards, η οποία παίρνει μια λίστα με συλλογές και επιστρέφει μια λίστα με ταξινομημένες κάρτες που τις έχουν όλες οι συλλογές.
boringCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
--> ["Scientuna"]
Έχετε μαζί, εσύ και οι φίλοι σου, όλες τις κάρτες Blorkemon™️;
Υλοποίησε τη totalCards, η οποία παίρνει μια λίστα με συλλογές και επιστρέφει τον συνολικό αριθμό των διαφορετικών καρτών σε όλες τις συλλογές.
totalCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
--> 2
Ο ανιψιός σου έρχεται σύντομα να σε επισκεφτεί και θέλεις να τον εντυπωσιάσεις. Στα παιδιά αρέσουν τα γυαλιστερά, έτσι δεν είναι; Οι κάρτες Blorkemon™️ μπορεί να είναι γυαλιστερές!
Υλοποίησε τη splitShinyCards, η οποία παίρνει μια συλλογή και επιστρέφει μια Tuple με δύο λίστες από ταξινομημένες κάρτες: μία με όλες τις κάρτες που αρχίζουν με "Shiny" και μία με τις υπόλοιπες κάρτες.
splitShinyCards (Set.fromList ["Newthree", "Scientuna", "Shiny Scientuna"])
--> (["Shiny Scientuna"], ["Newthree", "Scientuna"])
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elm με 28 έννοιες110 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.