Tracks
/
Gleam
Gleam
/
Ejercicios
/
Gotta Snatch 'Em All
Gotta Snatch 'Em All

Gotta Snatch 'Em All

Ejercicio de aprendizaje

Introducción

Conjuntos

Un conjunto es una colección inmutable y no ordenada de valores únicos. Todos los elementos de un conjunto deben 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 llenar 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])

También 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 cartas Blorkemon™️ no muestra señales de disminuir; incluso empezaste a coleccionarlas de nuevo y estás haciendo que tus amigos se unan a ti.

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

1. Empieza una colección

Tienes muchas ganas de que tus amigos se unan a tu locura por Blorkemon™️, y la mejor manera es darles el empujón inicial a su colección regalándoles una carta.

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

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

2. Haz crecer la colección

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

Implementa add_card, que recibe una carta y una colección, y devuelve una tupla con dos valores: un Bool que indica si la carta ya estaba en la colección, y la colección con la carta agregada.

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

3. Empieza a intercambiar

Ahora que tus amigos están otra vez locos por Blorkemon™️, puedes aprovechar esto para hacer crecer tu propia colección intercambiando cartas.

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

Implementa trade_card, que recibe dos cartas para intercambiar (la tuya y la suya) y tu colección actual. El valor devuelto es una tupla con dos valores: un Bool que indica si el intercambio es posible y vale la pena, y la colección con la que terminarí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. Cartas que todos tienen

Tú y tus amigos aficionados a Blorkemon™️ se reúnen y se preguntan cuáles son las cartas más comunes.

Implementa boring_cards, que recibe una lista de colecciones y devuelve una lista ordenada de las cartas que tienen todas las colecciones.

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

5. Todas las cartas

¿Entre tú y tus amigos tienen todas las cartas de Blorkemon™️?

Implementa total_cards, que recibe una lista de colecciones y devuelve el número total de cartas distintas 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 tienes ganas de impresionarlo. A los niños les gustan las cosas brillantes, ¿verdad? ¡Las cartas de Blorkemon™️ pueden ser brillantes!

Implementa shiny_cards, que recibe una colección y devuelve un conjunto que contiene todas las cartas que empiezan con "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 una pestaña nuevas
Gleam Exercism

¿Todo listo para empezar Gotta Snatch 'Em All?

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