Rutas
/
Java
Java
/
Ejercicios
/
Hay que hacerse con todos
Hay que hacerse con todos

Hay que hacerse con todos

Ejercicio de aprendizaje

Introducción

Conjuntos

Un Set es una colección no ordenada que (a diferencia de List) garantiza no contener valores duplicados.

El parámetro de tipo genérico de la interfaz Set denota el tipo de los elementos contenidos en el 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");

Ten en cuenta que el método Set.of() crea una instancia de Set no modificable. Si intentas llamar a métodos como add y remove en esta instancia, se producirá una excepción en tiempo de ejecución.

Para crear un Set modificable, tienes que instanciar una clase que implemente la interfaz Set. La clase integrada que implementa esta interfaz y que más se usa es la clase HashSet.

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

La interfaz Set extiende las interfaces Collection e Iterable y, por lo tanto, comparte muchos métodos con otros tipos de colecciones. Una diferencia notable con la interfaz Collection, sin embargo, es que métodos como add y remove devuelven un boolean (en lugar de void), lo que indica si el elemento estaba contenido en el conjunto cuando se llamó a ese método:

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

Instrucciones

Tu nostalgia por las cartas Blorkemon™️ no muestra signos de estar amainando; incluso has vuelto a coleccionarlas y estás consiguiendo que tus amigos se unan a ti.

En este ejercicio usarás la interfaz Set para gestionar tu colección, ya que las cartas duplicadas no son importantes cuando tu objetivo es conseguir todas las cartas existentes.

1. Empieza una colección

¡Acabas de encontrar tu viejo alijo de cartas Blorkemon™️! El alijo contiene un montón de cartas duplicadas, así que es hora de empezar una nueva colección eliminando los duplicados.

Quieres de verdad que tus amigos se unan a tu locura por Blorkemon™️, y la mejor manera es poner en marcha su colección regalándoles una carta.

Implementa el método newCollection, que transforma un array de cartas en un Set que representa tu nueva colección.

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

2. Haz crecer la colección

Una vez que tienes una colección, cobra vida propia y debe crecer.

Implementa el método addCard, que recibe una carta nueva y tu conjunto actual de cartas coleccionadas. El método debe añadir la carta nueva a la colección si aún no está presente, y debe devolver un boolean que indica si la colección se ha actualizado.

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

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

3. Empieza a intercambiar

Quieres de verdad que tus amigos se unan a tu locura por Blorkemon™️, ¡así que es hora de empezar a intercambiar!

Al intercambiar con amigos, no todos los intercambios merecen la pena, ni siempre se pueden hacer. Solo deberías intercambiar si tanto tú como tu amigo tenéis una carta que el otro no tiene.

Implementa el método canTrade, que recibe tu colección actual y la colección de uno de tus amigos. Debe devolver un boolean que indica si un intercambio es posible, siguiendo las reglas anteriores.

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

4. Identifica las cartas comunes

Tú y tus amigos aficionados a Blorkemon™️ os reunís y os preguntáis qué cartas son las más comunes.

Implementa el método commonCards, que recibe un array de colecciones y devuelve una colección con las cartas que tienen todas las colecciones.

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

5. Todas las cartas

¿Tenéis tú y tus amigos, entre todos, todas las cartas de Blorkemon™️?

Implementa el método allCards, que recibe un array de colecciones y devuelve una colección con todas las cartas distintas de todas las colecciones combinadas.

GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Java Exercism

¿Listo para empezar Hay que hacerse con todos?

Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.