Trilhas
/
Elm
Elm
/
Exercícios
/
Temos que pegar todos
Temos que pegar todos

Temos que pegar todos

Exercício de aprendizagem

Introdução

Set

Um Set a é uma sequência de valores únicos do tipo a. Os valores precisam ser do tipo comparable (Int, Float, Time, Char, String, e tuplas ou listas de tipos comparáveis).

Você pode transformar listas e conjuntos entre si com Set.toList e Set.fromList. Por causa da estrutura interna do Set, é garantido que uma lista obtida de Set.fromList estará ordenada.

Set.fromList [2, 3, 3, 3, 1, 1, 2]
    --> Set.fromList [1, 2, 3]

Set.toList (Set.fromList [2, 3, 3, 3, 1, 1, 2])
    --> [1, 2, 3]

Você pode criar e preencher conjuntos com Set.empty, Set.singleton, Set.insert e Set.remove.

Set.empty
    --> Set.fromList []

Set.singleton "hi"
    --> Set.fromList ["hi"]

eightyEight = Set.singleton 88

Set.insert 88 eightyEight
    --> Set.fromList [88]

Set.insert 89 eightyEight
    --> Set.fromList [88, 89]

Set.remove 88 eightyEight
    --> Set.fromList []

Set.remove 89 eightyEight
    --> Set.fromList [88]

Você pode consultar o conteúdo de um conjunto com as funções Set.member, Set.isEmpty e Set.size.

Set.member 88 eightyEight
    --> True

Set.isEmpty eightyEight
    --> False

Set.size eightyEight
    --> 1

Conjuntos podem ser combinados com Set.union, Set.intersect e Set.diff.

a = Set.fromList [1, 10, 100]
b = Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Set.union a b
    --> Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]

Set.intersect a b
    --> Set.fromList [1, 10]

Set.diff a b
    --> Set.fromList [100]

Set.diff b a
    --> Set.fromList [2, 3, 4, 5, 6, 7, 8, 9]

Você pode filtrar e particionar conjuntos.

even n = modBy 2 n == 0

Set.filter even b
    --> Set.fromList [2, 4, 6, 8, 10]

Set.partition even b
    --> (Set.fromList [2, 4, 6, 8, 10], Set.fromList [1, 3, 5, 7, 9])

Instruções

A sua nostalgia por cartas Blorkemon™️ não dá sinais de diminuir, você até voltou a colecioná-las e está chamando os seus amigos para participar.

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

1. Comece uma coleção

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

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

newCollection "Newthree"
    --> Set.fromList ["Newthree"]

2. Aumente a coleção

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

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

addCard "Scientuna" (Set.fromList ["Newthree"])
    --> (False, Set.fromList ["Newthree", "Scientuna"])

3. Comece a trocar

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

Nem toda troca vale a pena, ou pode sequer ser feita. Você não pode trocar uma carta que não tem, e não deve trocar uma carta por outra que você já tem.

Implemente tradeCard, que recebe duas cartas a serem trocadas (a sua e a deles) e a sua coleção atual. O valor de retorno é uma Tuple 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).

tradeCard "Scientuna" "Newthree" (Set.fromList ["Scientuna"])
    --> (True, Set.fromList ["Newthree"])

4. Só pode haver uma de cada

Você encontra um velho estoque de cartas em um mercado de pulgas. Você precisa ordenar as cartas e remover as duplicadas para comparar a lista com a sua coleção.

Implemente removeDuplicates, que ordena uma lista de cartas e retorna uma lista de cartas ordenadas e sem repetições.

removeDuplicates ["Newthree", "Newthree", "Newthree", "Scientuna"]
    --> ["Newthree", "Scientuna"]

5. Cartas que eles não têm

É hora de se sentir bem com a sua coleção.

Implemente extraCards, que recebe a sua coleção e outra coleção qualquer, e retorna o número de cartas que a outra coleção não tem.

extraCards (Set.fromList ["Scientuna"]) (Set.fromList ["Newthree", "Scientuna"])
    --> 0

6. 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 boringCards, que recebe uma lista de coleções e retorna uma lista de cartas ordenadas que todas as coleções têm.

boringCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> ["Scientuna"]

7. Todas as cartas

Você e seus amigos, juntos, possuem todas as cartas Blorkemon™️?

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

totalCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> 2

8. Brilhantes para vencer

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

Implemente splitShinyCards, que recebe uma coleção e retorna uma Tuple com duas listas de cartas ordenadas: uma com todas as cartas que começam com "Shiny" e outra com as demais cartas.

splitShinyCards (Set.fromList ["Newthree", "Scientuna", "Shiny Scientuna"])
    --> (["Shiny Scientuna"], ["Newthree", "Scientuna"])
Editar via GitHub O link abre em uma nova janela ou aba
Elm Exercism

Tudo pronto para começar Temos que pegar todos?

Crie sua conta no Exercism para aprender e dominar Elm com 28 conceitos110 exercícios e mentoria humana de verdade, tudo de graça.