Track
/
Elm
Elm
/
Esercizi
/
Acchiappali tutti!
Acchiappali tutti!

Acchiappali tutti!

Esercizio di apprendimento

Introduzione

Set

Un Set a è una sequenza di valori unici di tipo a. I valori devono essere di tipo comparable (Int, Float, Time, Char, String, e tuple o array di tipi comparabili).

Puoi trasformare array e set l'uno nell'altro con Set.toList e Set.fromList. Data la struttura interna di Set, è garantito che un array ottenuto da Set.fromList sarà ordinato.

Set.fromList [2, 3, 3, 3, 1, 1, 2]
    --> Set.fromList [1, 2, 3]

Set.toList (Set.fromList [2, 3, 3, 3, 1, 1, 2])
    --> [1, 2, 3]

Puoi creare e popolare set con Set.empty, Set.singleton, Set.insert e Set.remove.

Set.empty
    --> Set.fromList []

Set.singleton "hi"
    --> Set.fromList ["hi"]

eightyEight = Set.singleton 88

Set.insert 88 eightyEight
    --> Set.fromList [88]

Set.insert 89 eightyEight
    --> Set.fromList [88, 89]

Set.remove 88 eightyEight
    --> Set.fromList []

Set.remove 89 eightyEight
    --> Set.fromList [88]

Puoi interrogare il contenuto di un set con le funzioni Set.member, Set.isEmpty e Set.size.

Set.member 88 eightyEight
    --> True

Set.isEmpty eightyEight
    --> False

Set.size eightyEight
    --> 1

I set si possono combinare con Set.union, Set.intersect e Set.diff.

a = Set.fromList [1, 10, 100]
b = Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Set.union a b
    --> Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]

Set.intersect a b
    --> Set.fromList [1, 10]

Set.diff a b
    --> Set.fromList [100]

Set.diff b a
    --> Set.fromList [2, 3, 4, 5, 6, 7, 8, 9]

Puoi filtrare e partizionare i set.

even n = modBy 2 n == 0

Set.filter even b
    --> Set.fromList [2, 4, 6, 8, 10]

Set.partition even b
    --> (Set.fromList [2, 4, 6, 8, 10], Set.fromList [1, 3, 5, 7, 9])

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 Card è rappresentata da Set Card, dato che le carte duplicate non sono importanti quando l'obiettivo è ottenere tutte le carte esistenti.

1. Iniziare una collezione

Vuoi davvero che i tuoi amici entrino nella tua follia Blorkemon™️, e il modo migliore è far partire la loro collezione regalando loro una carta.

Implementa newCollection, che trasforma una carta in una collezione.

newCollection "Newthree"
    --> Set.fromList ["Newthree"]

2. Far crescere la collezione

Una volta ottenuta una collezione, questa acquisisce vita propria e deve crescere.

Implementa addCard, che prende una Card e una collezione e restituisce una Tuple con due valori: un Bool che indica se la Card era già presente nella collezione, e la collezione con la carta aggiunta.

addCard "Scientuna" (Set.fromList ["Newthree"])
    --> (False, Set.fromList ["Newthree", "Scientuna"])

3. Iniziare a scambiare

Ora che i tuoi amici sono di nuovo pazzi per i Blorkemon™️, puoi approfittarne per far crescere la tua collezione scambiando carte.

Non tutti gli scambi valgono la pena, né sono sempre possibili. Non puoi scambiare una carta che non hai, e non dovresti scambiare una carta con una che hai già.

Implementa tradeCard, che prende due carte da scambiare (la tua e la loro) e la tua collezione attuale. Il valore restituito è una Tuple di due valori: un Bool che indica se lo scambio è possibile e vale la pena farlo, e la collezione che otterresti se facessi lo scambio (anche se in realtà non è possibile).

tradeCard "Scientuna" "Newthree" (Set.fromList ["Scientuna"])
    --> (True, Set.fromList ["Newthree"])

4. Ce ne può essere solo una per tipo

Trovi una vecchia scorta di carte a un mercatino delle pulci. Devi ordinare le carte e rimuovere i duplicati per confrontare l'array con la tua collezione.

Implementa removeDuplicates, che ordina un array di carte e restituisce un array di carte ordinate e uniche.

removeDuplicates ["Newthree", "Newthree", "Newthree", "Scientuna"]
    --> ["Newthree", "Scientuna"]

5. Le carte che non hanno

È il momento di essere soddisfatti della tua collezione.

Implementa extraCards, che prende la tua collezione e un'altra collezione e restituisce il numero di carte che l'altra collezione non ha.

extraCards (Set.fromList ["Scientuna"]) (Set.fromList ["Newthree", "Scientuna"])
    --> 0

6. 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 boringCards, che prende un array di collezioni e restituisce un array di carte ordinate che tutte le collezioni hanno.

boringCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> ["Scientuna"]

7. Tutte le carte

Tu e i tuoi amici possedete collettivamente tutte le carte Blorkemon™️?

Implementa totalCards, che prende un array di collezioni e restituisce il numero totale di carte diverse in tutte le collezioni.

totalCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> 2

8. Luccicanti per la vittoria

Tuo nipote verrà presto a trovarti e hai voglia di impressionarlo. Ai bambini piacciono le cose luccicanti, no? Le carte Blorkemon™️ possono essere luccicanti!

Implementa splitShinyCards, che prende una collezione e restituisce una Tuple con due array di carte ordinate: uno con tutte le carte che iniziano con "Shiny" e uno con le altre carte.

splitShinyCards (Set.fromList ["Newthree", "Scientuna", "Shiny Scientuna"])
    --> (["Shiny Scientuna"], ["Newthree", "Scientuna"])
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elm Exercism

Vuoi iniziare Acchiappali tutti!?

Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.