A Set olyan elemek gyűjteménye, amely a következő tulajdonságokkal rendelkezik:
A Set() konstruktorral hozhatod létre őket, paraméterként bármilyen iterátort használva.
julia> s1 = Set(1:4)
Set([4, 2, 3, 1])
Új elemeket a push!() függvénnyel adhatsz hozzá (ugyanúgy, mint a tömböknél), a meglévőket pedig a delete!() függvénnyel távolíthatod el.
julia> push!(s1, 5)
Set([5, 4, 2, 3, 1])
# Duplicates are ignored
julia> push!(s1, 3)
Set([5, 4, 2, 3, 1])
julia> delete!(s1, 5)
Set([4, 2, 3, 1])
julia> length(s1) # length counts entries, despite the non-sequential type
4
Ahogy több más gyűjteménytípusnál is, a tagságot az in vagy a ∈ operátorral ellenőrizheted (a szimbólumhoz írd be a \in-t, majd nyomj tabot).
julia> 3 ∈ s1
true
Az alábbi műveletek támogatottak halmazpárokon (az operátorszimbólumok gyorsírása zárójelben látható).
union(A, B) vagy A ∪ B (\cup): minden elem, amely A-ban vagy B-ben vagy mindkettőben benne van.intersect(A, B) vagy A ∩ B (\cap): minden elem, amely A-ban és B-ben is közös.setdiff(A, B) (nincs szimbólum): az A-ban benne lévő, de B-ben nem szereplő elemek.symdiff(A, B) (nincs szimbólum): azok az elemek, amelyek vagy A-ban vagy B-ben benne vannak, de nem mindkettőben.issubset(A, B) vagy A ⊆ B (\subseteq) vagy B ⊇ A (\supseteq): true, ha A minden eleme B-ben is benne van.issetequal(A, B) (nincs szimbólum): true, ha A és B pontosan ugyanazokat az elemeket tartalmazza.isdisjoint(A, B) (nincs szimbólum): true, ha A és B között nincs közös elem (vagyis a metszetük üres).julia> s1 = Set(1:4);
julia> s2 = Set(3:6);
julia> s1 ∪ s2 # union
Set([5, 4, 6, 2, 3, 1])
julia> s1 ∩ s2 # intersect
Set([4, 3])
julia> setdiff(s1, s2)
Set([2, 1])
julia> symdiff(s1, s2)
Set([5, 6, 2, 1])
julia> s1 ⊇ s2 # issubset
false
Ezek közül soknak van módosító változata is, amelyeknél a függvénynév végére egy ! kerül.
A függvények teljes listájáért lásd a kézikönyvet.
Te és az üzlettársaid egy kis vendéglátó céget vezettek. Épp most vállaltad el, hogy lebonyolítasz egy rendezvényt egy helyi főzőklub számára, amelynek a középpontjában a „klub kedvence” ételek állnak. A klubnak nincs tapasztalata nagyobb rendezvények lebonyolításában, és segítségre van szüksége a szervezéshez, a bevásárláshoz, az előkészületekhez és a felszolgáláshoz. Úgy döntöttél, hogy írsz néhány rövid Julia-függvényt, amelyek felgyorsítják a teljes tervezési folyamatot.
A rendezvény receptjei többféle forrásból származnak, és a hozzávalóik között látszólag duplikált (vagy annál is több) bejegyzés szerepel. Nem szeretnéd, ha a végén felesleges dolgokat vásárolnál! Mielőtt elkezdődhet a bevásárlás és a főzés, minden étel hozzávalólistáját „meg kell tisztítani”.
Valósítsd meg a clean_ingredients(dish_name, dish_ingredients) függvényt, amely egy étel nevét és a hozzávalók egy Vector-át veszi át.
A függvény egy Tuple-t adjon vissza, amelynek első eleme az étel neve, ezt követi a duplikátumoktól megtisztított Set hozzávaló.
julia> clean_ingredients("Punjabi-Style Chole", ["onions", "tomatoes", "ginger paste", "garlic paste", "ginger paste", "vegetable oil", "bay leaves", "cloves", "cardamom", "cilantro", "peppercorns", "cumin powder", "chickpeas", "coriander powder", "red chili powder", "ground turmeric", "garam masala", "chickpeas", "ginger", "cilantro"])
("Punjabi-Style Chole", Set(["garam masala", "bay leaves", "ground turmeric", "ginger", "garlic paste", "peppercorns", "ginger paste", "red chili powder", "cardamom", "chickpeas", "cumin powder", "vegetable oil", "tomatoes", "coriander powder", "onions", "cilantro", "cloves"]))
A rendezvényen koktélok és „mocktailok” is lesznek, azaz olyan kevert italok, amelyek alkohol nélkül készülnek. Gondoskodnod kell róla, hogy a „mocktail” italok valóban alkoholmentesek legyenek, a koktélok pedig tényleg tartalmazzanak alkoholt.
Valósítsd meg a check_drinks(drink_name, drink_ingredients) függvényt, amely egy ital nevét és a hozzávalók egy Vector-át veszi át.
A függvény adja vissza az ital nevét, amelyet a „Mocktail” szó követ, ha az italnak nincs alkoholos hozzávalója, illetve az ital nevét, amelyet a „Cocktail” szó követ, ha az ital tartalmaz alkoholt.
Ebben a feladatban a koktélok csak az ALCOHOLS konstansban szereplő alkoholokat tartalmazhatják:
julia> check_drinks("Honeydew Cucumber", ["honeydew", "coconut water", "mint leaves", "lime juice", "salt", "english cucumber"])
"Honeydew Cucumber Mocktail"
julia> check_drinks("Shirley Tonic", ["cinnamon stick", "scotch", "whole cloves", "ginger", "pomegranate juice", "sugar", "club soda"])
"Shirley Tonic Cocktail"
A vendéglistán különböző étrendi igényű vendégek szerepelnek, és a személyzetednek szét kell válogatnia az ételeket Vegan, Vegetarian, Paleo, Keto és Omnivore kategóriába.
Valósítsd meg a categorize_dish(dish_name, dish_ingredients) függvényt, amely egy étel nevét és az étel hozzávalóinak egy set-jét veszi át.
A függvény egy String-et adjon vissza a dish name: CATEGORY formában (vagyis hogy az étel melyik étkezési kategóriába tartozik).
Minden étel beillik valamelyik kategóriába: VEGAN, VEGETARIAN, PALEO, KETO vagy OMNIVORE.
julia> categorize_dish("Sticky Lemon Tofu", Set(["tofu", "soy sauce", "salt", "black pepper", "cornstarch", "vegetable oil", "garlic", "ginger", "water", "vegetable stock", "lemon juice", "lemon zest", "sugar"]))
"Sticky Lemon Tofu: VEGAN"
julia> categorize_dish("Shrimp Bacon and Crispy Chickpea Tacos with Salsa de Guacamole", Set(["shrimp", "bacon", "avocado", "chickpeas", "fresh tortillas", "sea salt", "guajillo chile", "slivered almonds", "olive oil", "butter", "black pepper", "garlic", "onion"]))
"Shrimp Bacon and Crispy Chickpea Tacos with Salsa de Guacamole: OMNIVORE"
Néhány vendégnek allergiája van, és további étrendi korlátozásokat kell betartania. Ezeket a hozzávalókat minden ételnél meg kell jelölni vagy fel kell címkézni, hogy ne okozzanak problémát.
Valósítsd meg a tag_special_ingredients(dish) függvényt, amely egy Tuple-t vesz át, amelynek első pozíciójában az étel neve, második pozíciójában pedig az étel hozzávalóinak egy Vector-a vagy Set-je áll.
Add vissza az étel nevét, amelyet azoknak a hozzávalóknak a Set-je követ, amelyek külön megjegyzést igényelnek az étel leírásában.
Egy Vector-ban az étel hozzávalói között lehetnek duplikátumok, de nem feltétlenül.
Ebben a feladatban minden allergén vagy külön jelölést igénylő hozzávaló a SPECIAL_INGREDIENTS konstansban található.
julia> tag_special_ingredients(("Ginger Glazed Tofu Cutlets", ["tofu", "soy sauce", "ginger", "corn starch", "garlic", "brown sugar", "sesame seeds", "lemon juice"]))
("Ginger Glazed Tofu Cutlets", Set(["garlic","soy sauce","tofu"]))
julia> tag_special_ingredients(("Arugula and Roasted Pork Salad", ["pork tenderloin", "arugula", "pears", "blue cheese", "pine nuts", "balsamic vinegar", "onions", "black pepper"
]))
("Arugula and Roasted Pork Salad", Set(["pork tenderloin", "blue cheese", "pine nuts", "onions"]))
A rendelés és a bevásárlás előkészítéséhez össze kell állítanod az étlapon szereplő összes fogás hozzávalóinak egy „mesterlistáját” (a mennyiségeket később töltöd ki).
Valósítsd meg a compile_ingredients(dishes) függvényt, amely az ételek egy Vector-át veszi át, és visszaadja a felsorolt ételek összes hozzávalójának egy halmazát.
Minden egyes ételt a hozzávalóinak Set-je reprezentál.
julia> dishes = [Set(["tofu", "soy sauce", "ginger", "corn starch", "garlic", "brown sugar", "sesame seeds", "lemon juice"]), Set(["pork tenderloin", "arugula", "pears", "blue cheese", "pine nuts","balsamic vinegar", "onions", "black pepper"]), Set(["honeydew", "coconut water", "mint leaves", "lime juice", "salt", "english cucumber"])];
julia> compile_ingredients(dishes)
Set(["arugula", "brown sugar", "honeydew", "coconut water", "english cucumber", "balsamic vinegar", "mint leaves", "pears", "pork tenderloin", "ginger", "blue cheese", "soy sauce", "sesame seeds", "black pepper", "garlic", "lime juice", "corn starch", "pine nuts", "lemon juice", "onions", "salt", "tofu"])
A házigazdák adtak neked egy listát azokról az ételekről, amelyeket „falatkányi” előételként, tálcán felszolgálva szeretnének előkészítve látni. Ezeket ki kell emelned a nagyobb adagokként elkészülő ételek fő listájából.
Valósítsd meg a separate_appetizers(dishes, appetizers) függvényt, amely az ételnevek egy Vector-át és az előételnevek egy Vector-át veszi át.
A függvény egy Vector-t adjon vissza, amely az ételnevek listáját tartalmazza az előételnevek eltávolítása után.
A dishes és az appetizers Vector is tartalmazhat duplikátumokat, és szükség lehet a duplikátumok eltávolítására.
julia> dishes = ["Avocado Deviled Eggs","Flank Steak with Chimichurri and Asparagus", "Kingfish Lettuce Cups", "Grilled Flank Steak with Caesar Salad","Vegetarian Khoresh Bademjan","Avocado Deviled Eggs", "Barley Risotto","Kingfish Lettuce Cups"];
julia> appetizers = ["Kingfish Lettuce Cups","Avocado Deviled Eggs","Satay Steak Skewers", "Dahi Puri with Black Chickpeas","Avocado Deviled Eggs","Asparagus Puffs", "Asparagus Puffs"];
julia> separate_appetizers(dishes, appetizers)
["Vegetarian Khoresh Bademjan", "Barley Risotto", "Flank Steak with Chimichurri and Asparagus", "Grilled Flank Steak with Caesar Salad"]
Minden kategórián belül (VEGAN, VEGETARIAN, PALEO, KETO vagy OMNIVORE) ki fogod válogatni azokat a hozzávalókat, amelyek csak egy ételben szerepelnek.
Ezekhez a „singleton” hozzávalókhoz külön bevásárlót rendelnek, hogy a többi teendő sürgés-forgásában se feledkezzenek meg róluk.
Valósítsd meg a singleton_ingredients(dishes, intersection) függvényt, amely az ételek egy Vector-át és ugyanahhoz a kategóriához tartozó CATEGORY_INTERSECTION konstanst veszi át.
Minden ételt a hozzávalóinak Set-je reprezentál.
Minden CATEGORY_INTERSECTION olyan hozzávalók Set-je, amelyek a kategóriában egynél több ételben szerepelnek.
Halmazműveletek segítségével a függvényed adja vissza a „singleton” hozzávalók egy Set-jét (azokét a hozzávalókét, amelyek a kategóriában csak egy ételben szerepelnek).
julia> singleton_ingredients(example_dishes, EXAMPLE_INTERSECTION)
Set(["garlic powder", "sunflower oil", "mixed herbs", "cornstarch", "celeriac", "honey", "mushrooms", "bell pepper", "rosemary", "parsley", "lemon", "yeast", "vegetable oil", "vegetable stock", "silken tofu", "tofu", "cashews", "lemon zest", "smoked tofu", "spaghetti", "ginger", "breadcrumbs", "tomatoes", "barley malt", "red pepper flakes", "oregano", "red onion", "fresh basil"])
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Julia nyelvet 35 fogalom128 feladat segítségével, valódi emberi mentorálással, mindez ingyen.