Tracks
/
Gleam
Gleam
/
Übungen
/
Gotta Snatch 'Em All
Gotta Snatch 'Em All

Gotta Snatch 'Em All

Lernübung

Einführung

Sets

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])

Anleitung

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.

1. Starte eine Sammlung

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"])

2. Lass die Sammlung wachsen

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"]))

3. Beginne zu handeln

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"]))

4. Karten, die alle haben

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"]

5. Alle Karten

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

6. Glänzend zum Sieg

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"])
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Gleam Exercism

Bereit, mit Gotta Snatch 'Em All zu starten?

Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.