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

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

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

Εισαγωγή

Πίνακες

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

let empty = [| |]
let emptyAlternative = Array.empty

let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5

let threeValues = [| "a"; "b"; "c" |]

Στοιχεία μπορούν να εκχωρηθούν σε έναν πίνακα ή να ανακτηθούν από αυτόν χρησιμοποιώντας μια θέση. Οι πίνακες στη F# έχουν μηδενική βάση, που σημαίνει ότι η θέση του πρώτου στοιχείου είναι πάντα μηδέν:

let numbers = [| 2; 3; 5 |]

// Update value in array
numbers[2] <- 9

// Read value from array
numbers[2]
// => 9

Οι πίνακες είτε χειρίζονται με συναρτήσεις και τελεστές που ορίζονται στο άρθρωμα Array, είτε χειροκίνητα, χρησιμοποιώντας αντιστοίχιση προτύπων με το πρότυπο πίνακα:

let describe array =
    match array with
    | [| |] -> "Empty"
    | [| 1; 2; three |] -> sprintf "1, 2, %d" three
    | _ -> "Other"

describe [| |]         // => "Empty"
describe [| 1; 2; 4 |] // => "1, 2, 4"
describe [| 5; 7; 9 |] // => "Other"

Μπορείς επίσης να αγνοήσεις μια τιμή κατά την αντιστοίχιση προτύπων· όταν δεν σε νοιάζει μια τιμή σε μια συγκεκριμένη περίπτωση (δηλαδή δεν πρόκειται να χρησιμοποιήσεις μια τιμή), μπορείς να χρησιμοποιήσεις μια κάτω παύλα ('_') για να το δηλώσεις αυτό:

let describe array =
    match array with
    | [| |] -> "Empty array"
    | [| x |] -> "Array with one item"
    | [| _; y |] -> "Array with two items (first item ignored)"
    | _ -> "Array with many items (all items ignored)"

describe [| |]          // => "Empty array"
describe [| 1 |]        // => "Array with one item"
describe [| 5; 7 |]     // => "Array with two items (first item ignored)"
describe [| 5; 7; 9 |]  // => "Array with many items (all items ignored)"

Το μοναδικό '_' πρέπει πάντα να έρχεται τελευταίο κατά την αντιστοίχιση προτύπων, κάθε τιμή που δεν ταιριάζει με οποιαδήποτε από τις άλλες περιπτώσεις θα αντιμετωπιστεί από αυτή την περίπτωση.

Οδηγίες

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

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

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

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

lastWeek
// => [| 0; 2; 5; 3; 7; 8; 4 |]

2. Έλεγξε πόσα πουλιά επισκέφτηκαν χθες

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

yesterday [| 3; 5; 0; 7; 4; 1 |]
// => 4

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

Υλοποίησε τη συνάρτηση total ώστε να επιστρέφει τον συνολικό αριθμό των πουλιών που έχουν επισκεφτεί τον κήπο σου:

total [| 3; 5; 0; 7; 4; 1 |]
// => 20

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

Υλοποίησε τη συνάρτηση dayWithoutBirds που επιστρέφει true αν υπήρξε μέρα κατά την οποία κανένα πουλί δεν επισκέφτηκε τον κήπο· διαφορετικά, επέστρεψε false:

dayWithoutBirds [| 3; 5; 0; 7; 4; 1 |]
// => true

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

Υλοποίησε τη συνάρτηση incrementTodaysCount ώστε να αυξάνει τη σημερινή μέτρηση και να επιστρέφει τις ενημερωμένες μετρήσεις:

let birdCount = [| 3; 5; 0; 7; 4; 1 |]
incrementTodaysCount birdCount
// => [| 3; 5; 0; 7; 4; 2 |]

6. Έλεγξε για μια ασυνήθιστη εβδομάδα

Τον τελευταίο χρόνο, έχεις παρατηρήσει ότι κάποιες εβδομάδες έχουν τα ίδια, ασυνήθιστα μοτίβα:

  • Σε κάθε άρτια ημέρα της εβδομάδας, δεν υπήρχαν πουλιά
  • Σε κάθε άρτια ημέρα της εβδομάδας, εντοπίστηκαν ακριβώς 10 πουλιά
  • Σε κάθε περιττή ημέρα της εβδομάδας, εντοπίστηκαν ακριβώς 5 πουλιά

Υλοποίησε τη συνάρτηση unusualWeek που επιστρέφει true αν το μοτίβο των μετρήσεων πουλιών αυτής της εβδομάδας ταιριάζει με ένα από τα ασυνήθιστα μοτίβα:

unusualWeek [| 1; 0; 5; 0; 12; 0; 2 |]
// => true

unusualWeek [| 5; 0; 5; 12; 5; 3; 5|]
// => true

(Σημείωσε ότι η αρίθμηση των ημερών ξεκινά από το 1, όχι από το 0: το πρώτο στοιχείο του πίνακα αντιστοιχεί σε περιττή ημέρα)

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
F# Exercism

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

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