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

Hay que hacerse con todos

Ejercicio de aprendizaje

Introducción

Conjuntos

Un conjunto es una colección inmutable y sin orden de valores únicos. Todos los elementos de un conjunto tienen que ser del mismo tipo.

El módulo gleam/set define el tipo Set y proporciona funciones para trabajar con conjuntos.

Puedes transformar listas y conjuntos entre sí con set.to_list y set.from_list. No se garantiza el orden de los elementos de un conjunto.

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]

Puedes crear y rellenar conjuntos con set.new, set.insert y 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])

Puedes consultar el contenido de un conjunto con las funciones set.contains y set.size.

set.contains(eighty_eight, 88)
// -> True

set.size(eighty_eight)
// -> 1

Los conjuntos se pueden combinar con set.union y 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])

Puedes filtrar conjuntos.

let is_small = fn(n) { n <= 3 }

set.filter(b, is_small)
// -> set.from_list([1, 2, 3])

Instrucciones

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

En este ejercicio, una colección de tarjetas se representa con Set(String), ya que las tarjetas duplicadas no son importantes cuando tu objetivo es conseguir todas las tarjetas existentes.

1. Empieza una colección

Quieres que tus amigos se sumen a tu locura por Blorkemon™️, y la mejor forma es poner en marcha su colección regalándoles una tarjeta.

Implementa new_collection, que transforma una tarjeta en una colección.

new_collection("Newthree")
// -> set.from_list(["Newthree"])

2. Haz crecer la colección

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

Implementa add_card, que toma una tarjeta y una colección, y devuelve una tupla con dos valores: un Bool que indica si la tarjeta ya estaba en la colección, y la colección con la tarjeta añadida.

add_card(set.from_list(["Newthree"]), "Scientuna")
// -> #(False, set.from_list(["Newthree", "Scientuna"]))

3. Empieza a intercambiar

Ahora que tus amigos vuelven a estar locos por Blorkemon™️, puedes aprovechar esto para hacer crecer tu propia colección intercambiando tarjetas.

No todos los intercambios merecen la pena, ni siquiera siempre se pueden hacer. No puedes intercambiar una tarjeta que no tienes, y no deberías cambiar una tarjeta por otra que ya tienes.

Implementa trade_card, que toma dos tarjetas que intercambiar (la tuya y la suya) y tu colección actual. El valor devuelto es una tupla de dos valores: un Bool que indica si el intercambio es posible y merece la pena, y la colección con la que acabarías si hicieras el intercambio (aunque en realidad no sea posible).

trade_card("Scientuna", "Newthree", set.from_list(["Scientuna"]))
// -> #(True, set.from_list(["Newthree"]))

4. Tarjetas que todos tienen

Tú y tus amigos aficionados a Blorkemon™️ os reunís y os preguntáis cuáles son las tarjetas más comunes.

Implementa boring_cards, que toma una lista de colecciones y devuelve una lista de tarjetas ordenadas que tienen todas las colecciones.

boring_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> ["Scientuna"]

5. Todas las tarjetas

¿Entre tú y tus amigos tenéis todas las tarjetas de Blorkemon™️?

Implementa total_cards, que toma una lista de colecciones y devuelve el número total de tarjetas diferentes que hay en todas las colecciones.

total_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> 2

6. Brillantes para ganar

Tu sobrino viene a visitarte pronto y te apetece impresionarlo. A los niños les gustan las cosas brillantes, ¿verdad? ¡Las tarjetas Blorkemon™️ pueden ser brillantes!

Implementa shiny_cards, que toma una colección y devuelve un conjunto que contiene todas las tarjetas que empiezan por "Shiny ".

shiny_cards(set.from_list(["Newthree", "Scientuna", "Shiny Scientuna"]))
// -> set.from_list(["Shiny Scientuna"])
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Gleam Exercism

¿Listo para empezar Hay que hacerse con todos?

Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.