Trilhas
/
Clojure
Clojure
/
Exercícios
/
Observador de pássaros
Observador de pássaros

Observador de pássaros

Exercício de aprendizagem

Introdução

Um vector em Clojure é uma coleção sequencial, indexada e imutável de zero ou mais valores. Ou seja, depois que um vector é criado, ele não pode ser modificado. As funções que operam sobre vectors retornam um novo vector, e o vector original permanece inalterado. Os valores em um vector podem ser de tipos heterogêneos. Vectors podem ser definidos assim:

(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])

É possível obter elementos de um vector usando um índice. Os vectors do Clojure têm base zero, o que significa que o índice do primeiro elemento é sempre zero:

(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]

O vector original permanece inalterado:

numbers
;;=> [2 3 5]

Para guardar o valor atualizado, precisamos passá-lo adiante ou capturá-lo em uma var:

(def updated-numbers
  (assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9

Instruções

Você adora observar aves e acompanha quantas aves visitaram seu jardim nos últimos sete dias.

Você tem seis tarefas, todas sobre os números de aves que visitaram seu jardim.

1. Verifique quais foram as contagens da semana passada

Para efeito de comparação, você sempre mantém por perto uma cópia das contagens da semana passada, que foram: 0, 2, 5, 3, 7, 8 e 4. Crie um vetor com as contagens da semana passada:

last-week
;;=> [0 2 5 3 7 8 4]

2. Verifique quantas aves visitaram hoje

Implemente a função today para retornar quantas aves visitaram seu jardim hoje. As contagens de aves estão ordenadas por dia: o primeiro elemento é a contagem do dia mais antigo e o último elemento é a contagem de hoje.

(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1

3. Incremente a contagem de hoje

Implemente a função inc-bird para incrementar a contagem de hoje:

(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]

4. Verifique se houve algum dia sem aves visitantes

Implemente a função predicado day-without-birds?, que retorna true se houve algum dia em que zero aves visitaram o jardim; caso contrário, retorne false:

(day-without-birds? birds-per-day)
;;=> true

5. Calcule o número de aves visitantes nos primeiros dias

Implemente a função n-days-count que retorna o número de aves que visitaram seu jardim desde o início da semana, mas limite a contagem ao número de dias especificado a partir do início da semana.

(n-days-count birds-per-day 4)
;;=> 14

6. Calcule o número de dias movimentados

Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais aves visitaram seu jardim. Implemente a função busy-days para retornar o número de dias movimentados:

(busy-days birds-per-day)
;;=> 2

7. Verifique se a semana é ímpar

Ao longo do último ano, você percebeu que algumas semanas formam o mesmo padrão ímpar, em que as contagens alternam entre uma e zero aves visitando o jardim. Implemente a função odd-week? que retorna true se o padrão de contagem de aves desta semana corresponder ao padrão ímpar:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Editar via GitHub O link abre em uma nova janela ou aba
Clojure Exercism

Tudo pronto para começar Observador de pássaros?

Crie sua conta no Exercism para aprender e dominar Clojure com 12 conceitos105 exercícios e mentoria humana de verdade, tudo de graça.