Trilhas
/
Gleam
Gleam
/
Exercícios
/
Gotta Snatch 'Em All
Gotta Snatch 'Em All

Gotta Snatch 'Em All

Exercício de aprendizagem

Introdução

Conjuntos

Um conjunto é uma coleção imutável e não ordenada de valores únicos. Todos os itens de um conjunto precisam ser do mesmo tipo.

O módulo gleam/set define o tipo Set e fornece funções para trabalhar com conjuntos.

Você pode transformar listas e conjuntos entre si com set.to_list e set.from_list. A ordem dos itens em um conjunto não é garantida.

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]

Você pode criar e preencher conjuntos com set.new, set.insert e 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])

Você pode consultar o conteúdo de um conjunto com as funções set.contains e set.size.

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

set.size(eighty_eight)
// -> 1

Conjuntos podem ser combinados com set.union e 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])

Você pode filtrar conjuntos.

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

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

Instruções

Sua nostalgia pelas cartas de Blorkemon™️ não dá sinais de diminuir; você até começou a colecioná-las de novo e está chamando seus amigos para participar.

Neste exercício, uma coleção de cartas é representada por Set(String), já que cartas duplicadas não importam quando seu objetivo é conseguir todas as cartas existentes.

1. Comece uma coleção

Você quer muito que seus amigos entrem na sua loucura por Blorkemon™️, e a melhor forma é dar o pontapé inicial na coleção deles dando a cada um uma carta.

Implemente new_collection, que transforma uma carta em uma coleção.

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

2. Faça a coleção crescer

Depois que você tem uma coleção, ela ganha vida própria e precisa crescer.

Implemente add_card, que recebe uma carta e uma coleção e retorna uma tupla com dois valores: um Bool que indica se a carta já estava na coleção e a coleção com a carta adicionada.

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

3. Comece a trocar

Agora que seus amigos estão de novo loucos por Blorkemon™️, você pode usar isso para aumentar sua própria coleção trocando cartas.

Nem toda troca vale a pena, e algumas nem são possíveis. Você não pode trocar uma carta que não tem, e não deve trocar uma carta por outra que já tem.

Implemente trade_card, que recebe duas cartas a trocar (a sua e a deles) e sua coleção atual. O valor de retorno é uma tupla de dois valores: um Bool que diz se a troca é possível e vale a pena e a coleção com que você ficaria se fizesse a troca (mesmo que ela não seja realmente possível).

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

4. Cartas que todos têm

Você e seus amigos entusiastas de Blorkemon™️ se reúnem e se perguntam quais cartas são as mais comuns.

Implemente boring_cards, que recebe uma lista de coleções e retorna uma lista ordenada das cartas que todas as coleções têm.

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

5. Todas as cartas

Você e seus amigos, juntos, têm todas as cartas de Blorkemon™️?

Implemente total_cards, que recebe uma lista de coleções e retorna o número total de cartas diferentes em todas as coleções.

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

6. Brilhante para vencer

Seu sobrinho vem te visitar em breve e você quer impressioná-lo. Crianças gostam de coisas brilhantes, né? As cartas de Blorkemon™️ podem ser brilhantes!

Implemente shiny_cards, que recebe uma coleção e retorna um conjunto contendo todas as cartas que começam com "Shiny ".

shiny_cards(set.from_list(["Newthree", "Scientuna", "Shiny Scientuna"]))
// -> set.from_list(["Shiny Scientuna"])
Editar via GitHub O link abre em uma nova janela ou aba
Gleam Exercism

Tudo pronto para começar Gotta Snatch 'Em All?

Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.