Tracks
/
Clojure
Clojure
/
Ejercicios
/
Observador de aves
Observador de aves

Observador de aves

Ejercicio de aprendizaje

Introducción

Un vector en Clojure es una colección secuencial, indexada e inmutable de cero o más valores. Esto significa que una vez que se crea un vector, no se puede modificar. Las funciones que operan sobre vectores devuelven un vector nuevo, mientras que el vector original permanece sin cambios. Los valores de un vector pueden ser de tipos heterogéneos. Los vectores se pueden definir así:

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

Los elementos se pueden obtener de un vector usando un índice. Los vectores de Clojure están basados en cero, lo que significa que el índice del primer elemento siempre es cero:

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

El vector original no cambia:

numbers
;;=> [2 3 5]

Para recordar el valor actualizado, necesitamos pasarlo o capturarlo en un var:

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

Instrucciones

Eres un observador de aves aficionado que lleva la cuenta de cuántas aves han visitado tu jardín en los últimos siete días.

Tienes seis tareas, todas relacionadas con el número de aves que visitaron tu jardín.

1. Verifica cuáles fueron los conteos de la semana pasada

Para poder comparar, siempre tienes a mano una copia de los conteos de la semana pasada, que fueron: 0, 2, 5, 3, 7, 8 y 4. Crea un vector que contenga los conteos de la semana pasada:

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

2. Verifica cuántas aves visitaron hoy

Implementa la función today para que devuelva cuántas aves visitaron tu jardín hoy. Los conteos de aves están ordenados por día: el primer elemento es el conteo del día más antiguo y el último es el conteo de hoy.

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

3. Incrementa el conteo de hoy

Implementa la función inc-bird para incrementar el conteo de hoy:

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

4. Verifica si hubo un día sin aves visitantes

Implementa la función predicado day-without-birds?, que devuelve true si hubo un día en el que cero aves visitaron el jardín; de lo contrario, devuelve false:

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

5. Calcula el número de aves visitantes en los primeros días

Implementa la función n-days-count, que devuelve el número de aves que han visitado tu jardín desde el comienzo de la semana, pero limita el conteo al número de días especificado desde el comienzo de la semana.

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

6. Calcula el número de días ajetreados

Algunos días son más ajetreados que otros. Un día ajetreado es aquel en el que cinco o más aves han visitado tu jardín. Implementa la función busy-days para que devuelva el número de días ajetreados:

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

7. Verifica si la semana es impar

Durante el último año, has notado que algunas semanas siguen el mismo patrón impar, en el que los conteos alternan entre una y cero aves visitantes. Implementa la función odd-week? que devuelve true si el patrón de conteo de aves de esta semana coincide con el patrón impar:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Clojure Exercism

¿Todo listo para empezar Observador de aves?

Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.