Un insieme è una collezione immutabile e non ordinata di valori unici. Tutti gli elementi di un insieme devono essere dello stesso tipo.
Il modulo gleam/set definisce il tipo Set e fornisce funzioni per lavorare con gli insiemi.
Puoi convertire le liste in insiemi e gli insiemi in liste con set.to_list e set.from_list. L'ordine degli elementi in un insieme non è garantito.
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]
Puoi creare e popolare insiemi con set.new, set.insert e set.delete.
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])
Puoi interrogare il contenuto di un insieme con le funzioni set.contains e set.size.
set.contains(eighty_eight, 88)
// -> True
set.size(eighty_eight)
// -> 1
Gli insiemi si possono combinare con set.union e set.intersection.
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])
Puoi filtrare gli insiemi.
let is_small = fn(n) { n <= 3 }
set.filter(b, is_small)
// -> set.from_list([1, 2, 3])
La tua nostalgia per le carte Blorkemon™️ non accenna a placarsi, hai persino ricominciato a collezionarle e stai convincendo i tuoi amici a unirsi a te.
In questo esercizio, una collezione di carte è rappresentata da Set(String), dato che le carte duplicate non contano quando il tuo obiettivo è ottenere tutte le carte esistenti.
Vuoi davvero che i tuoi amici entrino nella tua follia Blorkemon™️, e il modo migliore è dare il via alla loro collezione regalando una carta.
Implementa new_collection, che trasforma una carta in una collezione.
new_collection("Newthree")
// -> set.from_list(["Newthree"])
Una volta che hai una collezione, questa prende vita propria e deve crescere.
Implementa add_card, che prende una carta e una collezione e restituisce una tupla con due valori: un Bool che indica se la carta era già nella collezione, e la collezione con la carta aggiunta.
add_card(set.from_list(["Newthree"]), "Scientuna")
// -> #(False, set.from_list(["Newthree", "Scientuna"]))
Ora che i tuoi amici sono di nuovo pazzi per Blorkemon™️, puoi approfittarne per far crescere la tua collezione scambiando carte.
Non tutti gli scambi valgono la pena, e non tutti si possono fare. Non puoi scambiare una carta che non hai, e non dovresti scambiare una carta con una che possiedi già.
Implementa trade_card, che prende due carte da scambiare (la tua e la loro) e la tua collezione attuale.
Il valore restituito è una tupla di due valori: un Bool che indica se lo scambio è possibile e vale la pena farlo, e la collezione con cui ti ritroveresti se lo facessi (anche se in realtà non è possibile).
trade_card("Scientuna", "Newthree", set.from_list(["Scientuna"]))
// -> #(True, set.from_list(["Newthree"]))
Tu e i tuoi amici appassionati di Blorkemon™️ vi riunite e vi chiedete quali carte siano le più comuni.
Implementa boring_cards, che prende una lista di collezioni e restituisce una lista ordinata delle carte che tutte le collezioni hanno in comune.
boring_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> ["Scientuna"]
Tu e i tuoi amici possedete collettivamente tutte le carte Blorkemon™️?
Implementa total_cards, che prende una lista di collezioni e restituisce il numero totale di carte diverse presenti in tutte le collezioni.
total_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> 2
Tuo nipote verrà presto a trovarti e ti va di fargli una bella impressione. Ai bambini piacciono le cose luccicanti, no? Le carte Blorkemon™️ possono essere shiny!
Implementa shiny_cards, che prende una collezione e restituisce un set contenente tutte le carte che iniziano con "Shiny ".
shiny_cards(set.from_list(["Newthree", "Scientuna", "Shiny Scientuna"]))
// -> set.from_list(["Shiny Scientuna"])
Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.