Track
/
Clojure
Clojure
/
Esercizi
/
Osservatore di uccelli
Osservatore di uccelli

Osservatore di uccelli

Esercizio di apprendimento

Introduzione

In Clojure un vector è una collezione sequenziale, indicizzata e immutabile di zero o più valori. Questo significa che, una volta creato, un vector non può più essere modificato. Le funzioni che operano sui vector restituiscono un nuovo vector, mentre il vector originale rimane invariato. I valori in un vector possono essere di tipi eterogenei. I vector si possono definire così:

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

Gli elementi si possono recuperare da un vector tramite un indice. I vector di Clojure sono basati sullo zero, cioè l'indice del primo 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]

Il vector originale rimane invariato:

numbers
;;=> [2 3 5]

Per ricordare il valore aggiornato, dobbiamo passarlo avanti oppure catturarlo in un var:

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

Istruzioni

Sei un appassionato di birdwatching che tiene traccia di quanti uccelli hanno visitato il tuo giardino negli ultimi sette giorni.

Hai sei attività, tutte relative al numero di uccelli che hanno visitato il tuo giardino.

1. Controlla quali erano i conteggi della settimana scorsa

Per fare un confronto, tieni sempre a portata di mano una copia dei conteggi della settimana scorsa, che erano: 0, 2, 5, 3, 7, 8 e 4. Crea un vettore che contenga i conteggi della settimana scorsa:

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

2. Controlla quanti uccelli hanno visitato oggi

Implementa la funzione today in modo che restituisca quanti uccelli hanno visitato il tuo giardino oggi. I conteggi degli uccelli sono ordinati per giorno: il primo elemento è il conteggio del giorno meno recente, l'ultimo è il conteggio di oggi.

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

3. Incrementa il conteggio di oggi

Implementa la funzione inc-bird per incrementare il conteggio di oggi:

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

4. Controlla se c'è stato un giorno senza uccelli in visita

Implementa la funzione predicato day-without-birds? che restituisce true se c'è stato un giorno in cui zero uccelli hanno visitato il giardino; altrimenti restituisce false:

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

5. Calcola il numero di uccelli in visita per i primi giorni specificati

Implementa la funzione n-days-count che restituisce il numero di uccelli che hanno visitato il tuo giardino dall'inizio della settimana, ma limita il conteggio al numero di giorni specificato dall'inizio della settimana.

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

6. Calcola il numero di giorni intensi

Alcuni giorni sono più intensi di altri. Un giorno intenso è un giorno in cui cinque o più uccelli hanno visitato il tuo giardino. Implementa la funzione busy-days in modo che restituisca il numero di giorni intensi:

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

7. Controlla se è una settimana anomala

Nel corso dell'ultimo anno, hai scoperto che alcune settimane formano lo stesso schema anomalo, in cui i conteggi si alternano tra uno e zero uccelli in visita. Implementa la funzione odd-week? che restituisce true se lo schema dei conteggi degli uccelli di questa settimana corrisponde allo schema anomalo:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Clojure Exercism

Vuoi iniziare Osservatore di uccelli?

Iscriviti a Exercism per imparare e padroneggiare Clojure con 12 concetti105 esercizi e il mentoring di persone reali, tutto gratis.