Rutas
/
Clojure
Clojure
/
Ejercicios
/
Observador de pájaros
Observador de pájaros

Observador de pájaros

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 ha creado un vector, no se puede modificar. Las funciones que operan sobre vectores devolverán un nuevo vector, mientras que el vector original permanece sin cambios. Los valores de un vector pueden ser de tipos heterogéneos. Los vectores se pueden definir de la siguiente manera:

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

Se puede acceder a los elementos de un vector mediante un índice. Los vectores de Clojure están indexados desde 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 una var:

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

Instrucciones

Eres un ávido observador de aves 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 han visitado tu jardín.

1. Comprueba cuáles fueron los recuentos de la semana pasada

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

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

2. Comprueba cuántas aves han visitado hoy

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

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

3. Incrementa el recuento de hoy

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

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

4. Comprueba si hubo algún día sin aves visitantes

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

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

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

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 recuento 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. Comprueba si hay una semana impar

Durante el último año, has descubierto que algunas semanas forman el mismo patrón impar, en el que los recuentos alternan entre una y cero aves visitantes. Implementa la función odd-week?, que devuelve true si el patrón de recuento 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 pestaña nueva
Clojure Exercism

¿Listo para empezar Observador de pájaros?

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