Διαδρομές
/
Clojure
Clojure
/
Ασκήσεις
/
Παρατηρητής πουλιών
Παρατηρητής πουλιών

Παρατηρητής πουλιών

Άσκηση εκμάθησης

Εισαγωγή

Ένα vector στη Clojure είναι μια συλλογή από μηδέν ή περισσότερες τιμές, με σειρά, προσβάσιμη με θέσεις και αμετάβλητη. Αυτό σημαίνει ότι μόλις δημιουργηθεί ένας vector, δεν μπορεί να τροποποιηθεί. Οι συναρτήσεις που δουλεύουν με vector επιστρέφουν έναν νέο vector, ενώ ο αρχικός vector μένει αμετάβλητος. Οι τιμές σε έναν vector μπορούν να είναι διαφορετικών τύπων. Οι vector μπορούν να οριστούν ως εξής:

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

Μπορείς να πάρεις τα στοιχεία ενός vector χρησιμοποιώντας τη θέση τους. Οι θέσεις στους vector της Clojure ξεκινούν από το μηδέν, που σημαίνει ότι η θέση του πρώτου στοιχείου είναι πάντα μηδέν:

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

Ο αρχικός vector μένει αμετάβλητος:

numbers
;;=> [2 3 5]

Για να κρατήσουμε την ενημερωμένη τιμή, πρέπει να τη μεταφέρουμε παρακάτω ή να την αποθηκεύσουμε σε μια var:

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

Οδηγίες

Είσαι ένας φανατικός παρατηρητής πουλιών που καταγράφει πόσα πουλιά έχουν επισκεφτεί τον κήπο σου τις τελευταίες επτά μέρες.

Έχεις έξι εργασίες, όλες σχετικές με τους αριθμούς των πουλιών που επισκέφτηκαν τον κήπο σου.

1. Έλεγξε ποιες ήταν οι μετρήσεις την προηγούμενη εβδομάδα

Για λόγους σύγκρισης, κρατάς πάντα κοντά σου ένα αντίγραφο των μετρήσεων της προηγούμενης εβδομάδας, που ήταν: 0, 2, 5, 3, 7, 8 και 4. Δημιούργησε ένα διάνυσμα που να περιέχει τις μετρήσεις της προηγούμενης εβδομάδας:

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

2. Έλεγξε πόσα πουλιά επισκέφτηκαν τον κήπο σήμερα

Υλοποίησε τη συνάρτηση today ώστε να επιστρέφει πόσα πουλιά επισκέφτηκαν τον κήπο σου σήμερα. Οι μετρήσεις των πουλιών είναι ταξινομημένες ανά μέρα, με το πρώτο στοιχείο να είναι η μέτρηση της παλαιότερης μέρας και το τελευταίο στοιχείο να είναι η σημερινή μέτρηση.

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

3. Αύξησε τη σημερινή μέτρηση

Υλοποίησε τη συνάρτηση inc-bird ώστε να αυξάνει τη σημερινή μέτρηση:

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

4. Έλεγξε αν υπήρξε μέρα χωρίς επισκέψεις πουλιών

Υλοποίησε τη συνάρτηση κατηγορήματος day-without-birds? που επιστρέφει true αν υπήρξε μέρα κατά την οποία μηδέν πουλιά επισκέφτηκαν τον κήπο, αλλιώς να επιστρέφει false:

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

5. Υπολόγισε τον αριθμό των πουλιών που επισκέφτηκαν τον κήπο για έναν ορισμένο αριθμό πρώτων ημερών

Υλοποίησε τη συνάρτηση n-days-count που επιστρέφει τον αριθμό των πουλιών που έχουν επισκεφτεί τον κήπο σου από την αρχή της εβδομάδας, αλλά περιορίζοντας τη μέτρηση στον καθορισμένο αριθμό ημερών από την αρχή της εβδομάδας.

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

6. Υπολόγισε τον αριθμό των πολυάσχολων ημερών

Μερικές μέρες είναι πιο πολυάσχολες από άλλες. Πολυάσχολη μέρα είναι εκείνη κατά την οποία πέντε ή περισσότερα πουλιά έχουν επισκεφτεί τον κήπο σου. Υλοποίησε τη συνάρτηση busy-days ώστε να επιστρέφει τον αριθμό των πολυάσχολων ημερών:

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

7. Έλεγξε για παράξενη εβδομάδα

Τον τελευταίο χρόνο, διαπίστωσες ότι κάποιες εβδομάδες σχηματίζουν το ίδιο, παράξενο πρότυπο, όπου οι μετρήσεις εναλλάσσονται μεταξύ ενός και μηδέν πουλιών που επισκέπτονται τον κήπο. Υλοποίησε τη συνάρτηση odd-week? που επιστρέφει true αν το πρότυπο των μετρήσεων των πουλιών αυτής της εβδομάδας ταιριάζει με το παράξενο πρότυπο:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Clojure Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παρατηρητής πουλιών;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Clojure με 12 έννοιες105 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.