Percursos
/
R
R
/
Exercícios
/
A playlist do Ozan
A playlist do Ozan

A playlist do Ozan

Exercício de aprendizagem

Introdução

O R não tem um tipo de dados de conjunto próprio; em vez disso, usa várias funções para realizar operações semelhantes em vetores.

O operador %in% testa se um valor pertence a um conjunto.

2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE

As funções relevantes incluem unique (para remover duplicados), além de union(), intersect(), setdiff() e setequal(), que operam sobre pares de conjuntos.

> set_1 <- c("a", "b", "c", "b", "a")
> unique(set_1) # deduplicate
[1] "a" "b" "c"

> set_2 <- c('a', "c", "d")
> union(set_1, set_2) # values in either set
[1] "a" "b" "c" "d"

> intersect(set_1, set_2) # values in both sets
[1] "a" "c"

> setdiff(set_1, set_2) # values in set_1 but not set_2
[1] "b"

> setdiff(set_2, set_1) # values in set_2 but not set_1
[1] "d"

setequal(set_1, c("c", "b", "a", "b")) # are elements the same after deduplication?
[1] TRUE

Em cada um dos casos, set_1 e set_2 permanecem inalterados.

Instruções

O Ozan está a preparar uma playlist para uma viagem de carro que se aproxima. Não quer ouvir a mesma faixa mais do que uma vez, mas a playlist já está tão longa que tem dificuldade em lembrar-se de que faixas já foram adicionadas.

A API do leitor de música do Ozan só sabe trabalhar com vetores. Não são possíveis ciclos explícitos nem lógica if/else. Ele precisa da tua ajuda!

1. Remover as faixas duplicadas

Implementa a função remove_duplicates, que recebe uma playlist como parâmetro e devolve uma nova playlist em que todas as faixas são únicas.

> playlist <- c(
  "Court and Spark - Joni Mitchell",
  "Big Yellow Taxi - Joni Mitchell",
  "Court and Spark - Joni Mitchell"
)

> remove_duplicates(playlist)
[1] "Court and Spark - Joni Mitchell" "Big Yellow Taxi - Joni Mitchell"

2. Verificar se uma faixa já foi adicionada

Implementa a função has_track, que recebe uma playlist e uma faixa como parâmetros e devolve um boolean que indica se a playlist contém a faixa.

> playlist <- c(
  "The Fashion Show - Grace Jones",
  "Dr. Funkenstein - Parliament"
)

> has_track(playlist, "Dr. Funkenstein - Parliament")
[1] TRUE

> has_track(playlist, "Walking in the Rain - Grace Jones")
[1] FALSE

3. Adicionar faixas

Implementa a função add_tracks, que recebe uma playlist e um vetor com uma ou mais faixas como parâmetros e devolve uma nova playlist que inclui essas faixas.

> playlist <- c("Selma - Bijelo Dugme")

> playlist <- add_tracks(playlist, "Atomic Dog - George Clinton")
> playlist
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton"

> add_tracks(playlist, "Selma - Bijelo Dugme")
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton"

> add_tracks(playlist, c("The Chain - Fleetwood Mac", "Selma - Bijelo Dugme"))
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton" "The Chain - Fleetwood Mac"  

4. Eliminar faixas

Implementa a função delete_tracks, que recebe uma playlist e uma ou mais faixas como parâmetros e devolve uma nova playlist que não inclui essas faixas.

> playlist <- c(
  "The Treasure - Fra Lippo Lippi",
  "After the Fall - Klaus Nomi"
)

> playlist <- delete_tracks(playlist, "The Treasure - Fra Lippo Lippi")
> playlist
[1] "After the Fall - Klaus Nomi"

> delete_tracks(playlist, "I Feel the Magic - Belinda Carlisle")
[1] "After the Fall - Klaus Nomi"

5. Comparar playlists

O Ozan conhece um novo amigo e pergunta-se até que ponto os gostos dos dois se parecem. Implementa a função find_common_tracks, que recebe duas playlists e devolve uma nova playlist só com as faixas que existem em ambas.

> playlist_1 <- c("Karma - Taylor Swift", "Tired - Adele")
> playlist_2 <- c("Andromeda - Weyes Blood", "Karma - Taylor Swift")
> find_common_tracks(playlist_1, playlist_2)
[1] "Karma - Taylor Swift"
Editar via GitHub A ligação abre numa nova janela ou separador
R Exercism

Estás pronto para começar A playlist do Ozan?

Inscreve-te no Exercism para aprenderes e dominares R com 21 conceitos111 exercícios, e mentoria humana real, tudo grátis.