Track
/
Gleam
Gleam
/
Esercizi
/
Gotta Snatch 'Em All
Gotta Snatch 'Em All

Gotta Snatch 'Em All

Esercizio di apprendimento

Introduzione

Insiemi

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

Istruzioni

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.

1. Inizia una collezione

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

2. Fai crescere la collezione

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

3. Inizia a scambiare

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

4. Le carte che hanno tutti

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

5. Tutte le carte

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

6. Shiny per vincere

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"])
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Gleam Exercism

Vuoi iniziare Gotta Snatch 'Em All?

Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.