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])
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.
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"])
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"]))
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"]))
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"]
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
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"])
Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.