Ein Set ist eine unveränderliche und ungeordnete Sammlung eindeutiger Werte. Alle Elemente in einem Set müssen vom selben Typ sein.
Das Modul gleam/set definiert den Typ Set und stellt Funktionen für die Arbeit mit Sets bereit.
Du kannst Listen und Sets mit set.to_list und set.from_list ineinander umwandeln. Die Reihenfolge der Elemente in einem Set ist nicht garantiert.
set.from_list([2, 3, 3, 3, 1, 1, 2])
// -> set.from_list([1, 2, 3])
set.to_list(set.from_list([2, 3, 3, 3, 1, 1, 2]))
// -> [1, 2, 3]
Du kannst Sets mit set.new, set.insert und set.delete erstellen und befüllen.
set.new()
// -> set.from_list([])
let eighty_eight = set.from_list([88])
set.insert(eighty_eight, 88)
// -> set.from_list([88])
set.insert(eighty_eight, 89)
// -> set.from_list([88, 89])
set.delete(eighty_eight, 89)
// -> set.from_list([88])
Du kannst den Inhalt eines Sets mit den Funktionen set.contains und set.size abfragen.
set.contains(eighty_eight, 88)
// -> True
set.size(eighty_eight)
// -> 1
Sets lassen sich mit set.union und set.intersection kombinieren.
let a = set.from_list([1, 5, 10])
let b = set.from_list([1, 2, 3, 4, 5])
set.union(a, b)
// -> set.from_list([1, 2, 3, 4, 5, 10])
set.intersection(a, b)
// -> set.from_list([1, 5])
Du kannst Sets filtern.
let is_small = fn(n) { n <= 3 }
set.filter(b, is_small)
// -> set.from_list([1, 2, 3])
Deine Nostalgie für Blorkemon™️-Karten lässt nicht nach. Du hast sogar wieder angefangen, sie zu sammeln, und bringst deine Freunde dazu, mitzumachen.
Bei dieser Übung wird eine Kartensammlung durch Set(String) dargestellt, da doppelte Karten keine Rolle spielen, wenn dein Ziel ist, alle vorhandenen Karten zu bekommen.
Du möchtest unbedingt, dass deine Freunde bei deinem Blorkemon™️-Wahn mitmachen, und der beste Weg ist, ihre Sammlung mit einer einzigen Karte in Gang zu bringen.
Implementiere new_collection, das eine Karte in eine Sammlung umwandelt.
new_collection("Newthree")
// -> set.from_list(["Newthree"])
Sobald du eine Sammlung hast, entwickelt sie ein Eigenleben und muss wachsen.
Implementiere add_card, das eine Karte und eine Sammlung entgegennimmt und ein Tupel mit zwei Werten zurückgibt: einen Bool, der angibt, ob die Karte bereits in der Sammlung war, und die Sammlung mit der hinzugefügten Karte.
add_card(set.from_list(["Newthree"]), "Scientuna")
// -> #(False, set.from_list(["Newthree", "Scientuna"]))
Jetzt, wo deine Freunde wieder verrückt nach Blorkemon™️ sind, kannst du das nutzen, um deine eigene Sammlung durch Kartentausch zu vergrößern.
Nicht jeder Tausch lohnt sich oder ist überhaupt möglich. Du kannst keine Karte tauschen, die du nicht hast, und du solltest keine Karte gegen eine tauschen, die du bereits hast.
Implementiere trade_card, das zwei Karten zum Tauschen (deine und ihre) und deine aktuelle Sammlung entgegennimmt.
Der Rückgabewert ist ein Tupel aus zwei Werten: ein Bool, der angibt, ob der Tausch möglich ist und sich lohnt, und die Sammlung, die du am Ende hättest, wenn du den Tausch durchführst (auch wenn er nicht wirklich möglich ist).
trade_card("Scientuna", "Newthree", set.from_list(["Scientuna"]))
// -> #(True, set.from_list(["Newthree"]))
Du und deine begeisterten Blorkemon™️-Freunde trefft euch und fragt euch, welche Karten am häufigsten vorkommen.
Implementiere boring_cards, das eine Liste von Sammlungen entgegennimmt und eine sortierte Liste der Karten zurückgibt, die in allen Sammlungen vorkommen.
boring_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> ["Scientuna"]
Besitzt du zusammen mit deinen Freunden alle Blorkemon™️-Karten?
Implementiere total_cards, das eine Liste von Sammlungen entgegennimmt und die Gesamtzahl der verschiedenen Karten in allen Sammlungen zurückgibt.
total_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> 2
Dein Neffe kommt dich bald besuchen, und du möchtest ihn beeindrucken. Kinder mögen doch glänzende Dinge, oder? Blorkemon™️-Karten können glänzend sein!
Implementiere shiny_cards, das eine Sammlung entgegennimmt und ein Set zurückgibt, das alle Karten enthält, die mit "Shiny " beginnen.
shiny_cards(set.from_list(["Newthree", "Scientuna", "Shiny Scientuna"]))
// -> set.from_list(["Shiny Scientuna"])
Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.