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

Gotta Snatch 'Em All

Esercizio di apprendimento

Introduzione

Set

Un Set è una collezione non ordinata che, a differenza di List, ha la garanzia di non contenere valori duplicati.

Il parametro di tipo generico dell'interfaccia Set indica il tipo degli elementi contenuti nel Set:

Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");

Nota che il metodo Set.of() crea un'istanza di Set non modificabile. Se provi a chiamare metodi come add e remove su questa istanza, otterrai un'eccezione in fase di esecuzione.

Per creare un Set modificabile, devi istanziare una classe che implementa l'interfaccia Set. La classe integrata più usata che implementa questa interfaccia è la classe HashSet.

Set<Integer> ints = new HashSet<>();

L'interfaccia Set estende le interfacce Collection e Iterable, e quindi condivide molti metodi con altri tipi di collezioni. Una differenza notevole rispetto all'interfaccia Collection, però, è che metodi come add e remove restituiscono un boolean (invece di void) che indica se l'elemento era contenuto nel set nel momento in cui è stato chiamato il metodo:

Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1

Istruzioni

La tua nostalgia per le carte Blorkemon™️ non accenna a diminuire, hai persino ricominciato a collezionarle e stai convincendo i tuoi amici a unirsi a te.

In questo esercizio, userai l'interfaccia Set per gestire la tua collezione, dato che le carte duplicate non sono importanti quando il tuo obiettivo è ottenere tutte le carte esistenti.

1. Inizia una collezione

Hai appena ritrovato la tua vecchia scorta di carte Blorkemon™️! La scorta contiene un mucchio di carte duplicate, quindi è il momento di iniziare una nuova collezione eliminando i duplicati.

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

Implementa il metodo newCollection, che trasforma una lista di carte in un Set che rappresenta la tua nuova collezione.

GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}

2. Fai crescere la collezione

Una volta che hai una collezione, questa prende vita propria e deve crescere.

Implementa il metodo addCard, che riceve una nuova carta e il tuo insieme attuale di carte collezionate. Il metodo deve aggiungere la nuova carta alla collezione se non è già presente e deve restituire un boolean che indica se la collezione è stata aggiornata.

Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true

collection.contains("Scientuna");
// => true

3. Inizia a scambiare

Vuoi davvero che i tuoi amici entrino nella tua follia per Blorkemon™️, quindi è il momento di iniziare a scambiare!

Quando si scambia con gli amici, non tutti gli scambi valgono la pena, né sono sempre possibili. Dovresti scambiare solo se sia tu sia il tuo amico avete una carta che l'altro non ha.

Implementa il metodo canTrade, che riceve la tua collezione attuale e la collezione di uno dei tuoi amici. Deve restituire un boolean che indica se uno scambio è possibile, seguendo le regole precedenti.

Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true

4. Individua le carte comuni

Tu e i tuoi amici appassionati di Blorkemon™️ vi riunite e vi chiedete quali carte siano le più comuni.

Implementa il metodo commonCards, che riceve una lista di collezioni e restituisce una collezione delle carte che tutte le collezioni hanno in comune.

GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}

5. Tutte le carte

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

Implementa il metodo allCards, che riceve una lista di collezioni e restituisce una collezione di tutte le carte diverse presenti in tutte le collezioni messe insieme.

GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Java Exercism

Vuoi iniziare Gotta Snatch 'Em All?

Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.