Διαδρομές
/
F#
F#
/
Ασκήσεις
/
Η Παρείσφρηση της Annalyn
Η Παρείσφρηση της Annalyn

Η Παρείσφρηση της Annalyn

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

Εισαγωγή

Boolean

Στη F#, οι Boolean τιμές αναπαρίστανται από τον τύπο bool, οι τιμές του οποίου μπορούν να είναι είτε true είτε false.

Η F# υποστηρίζει τρεις τελεστές Boolean: not (ΟΧΙ), && (ΚΑΙ) και || (Ή).

Οδηγίες

Σε αυτή την άσκηση, θα υλοποιήσεις τη λογική της αποστολής για ένα νέο παιχνίδι RPG που αναπτύσσει ένας φίλος σου. Ο κεντρικός χαρακτήρας του παιχνιδιού είναι η Annalyn, ένα γενναίο κορίτσι με ένα άγριο και πιστό σκυλί. Δυστυχώς, όμως, η καταστροφή χτυπά: ο καλύτερός της φίλος απήχθη ενώ έψαχνε για μούρα στο δάσος. Η Annalyn θα προσπαθήσει να τον βρει και να τον ελευθερώσει, παίρνοντας προαιρετικά μαζί της το σκυλί της σε αυτή την αποστολή.

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

Έχοντας βρει τους απαγωγείς, η Annalyn σκέφτεται ποιες από τις παρακάτω ενέργειες μπορεί να κάνει:

  • Γρήγορη επίθεση: μια γρήγορη επίθεση μπορεί να γίνει αν ο ιππότης κοιμάται, καθώς χρειάζεται χρόνο για να φορέσει την πανοπλία του, οπότε θα είναι ευάλωτος.
  • Κατασκοπεία: μπορεί να κατασκοπευτεί η ομάδα αν τουλάχιστον ένας από αυτούς είναι ξύπνιος. Διαφορετικά, η κατασκοπεία είναι χάσιμο χρόνου.
  • Σήμα στον κρατούμενο: μπορεί να σταλεί σήμα στον κρατούμενο με ήχους πουλιών αν ο κρατούμενος είναι ξύπνιος και ο τοξότης κοιμάται, καθώς οι τοξότες είναι εκπαιδευμένοι στα σήματα με πουλιά, οπότε θα μπορούσαν να υποκλέψουν το μήνυμα.
  • Ελευθέρωση κρατούμενου: Η Annalyn μπορεί να προσπαθήσει να μπει κρυφά στο στρατόπεδο για να ελευθερώσει τον κρατούμενο. Αυτό είναι ριψοκίνδυνο και μπορεί να πετύχει μόνο με έναν από δύο τρόπους:
    • Αν η Annalyn έχει μαζί της το σκυλί της, μπορεί να σώσει τον κρατούμενο αν ο τοξότης κοιμάται. Ο ιππότης φοβάται το σκυλί και ο τοξότης δεν θα προλάβει να ετοιμαστεί πριν η Annalyn και ο κρατούμενος μπορέσουν να διαφύγουν.
    • Αν η Annalyn δεν έχει το σκυλί της, τότε αυτή και ο κρατούμενος πρέπει να κινηθούν πολύ αθόρυβα! Η Annalyn μπορεί να ελευθερώσει τον κρατούμενο αν ο κρατούμενος είναι ξύπνιος και ο ιππότης και ο τοξότης κοιμούνται και οι δύο, αλλά αν ο κρατούμενος κοιμάται δεν μπορούν να σωθούν: ο κρατούμενος θα τρομάξει από την ξαφνική εμφάνιση της Annalyn και θα ξυπνήσει τον ιππότη και τον τοξότη.

Έχεις τέσσερις εργασίες: να υλοποιήσεις τη λογική που καθορίζει αν οι παραπάνω ενέργειες είναι διαθέσιμες, με βάση την κατάσταση των τριών χαρακτήρων που βρίσκονται στο δάσος και το αν το σκυλί της Annalyn είναι παρόν ή όχι.

1. Έλεγξε αν μπορεί να γίνει γρήγορη επίθεση

Υλοποίησε τη συνάρτηση canFastAttack που παίρνει μια boolean τιμή η οποία δείχνει αν ο ιππότης είναι ξύπνιος. Η συνάρτηση επιστρέφει true αν μπορεί να γίνει γρήγορη επίθεση με βάση την κατάσταση του ιππότη. Διαφορετικά, επιστρέφει false:

let knightIsAwake = true
canFastAttack(knightIsAwake)
// => false

2. Έλεγξε αν μπορεί να κατασκοπευτεί η ομάδα

Υλοποίησε τη συνάρτηση canSpy που παίρνει τρεις boolean τιμές, που δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν μπορεί να κατασκοπευτεί η ομάδα, με βάση την κατάσταση των τριών χαρακτήρων. Διαφορετικά, επιστρέφει false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)
// => true

3. Έλεγξε αν μπορεί να σταλεί σήμα στον κρατούμενο

Υλοποίησε τη συνάρτηση canSignalPrisoner που παίρνει δύο boolean τιμές, που δείχνουν αν ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν μπορεί να σταλεί σήμα στον κρατούμενο, με βάση την κατάσταση των δύο χαρακτήρων. Διαφορετικά, επιστρέφει false:

let archerIsAwake = false
let prisonerIsAwake = true
canSignalPrisoner(archerIsAwake, prisonerIsAwake)
// => true

4. Έλεγξε αν μπορεί να ελευθερωθεί ο κρατούμενος

Υλοποίησε τη συνάρτηση canFreePrisoner που παίρνει τέσσερις boolean τιμές. Οι τρεις πρώτες παράμετροι δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η τελευταία παράμετρος δείχνει αν το σκυλί της Annalyn είναι παρόν. Η συνάρτηση επιστρέφει true αν μπορεί να ελευθερωθεί ο κρατούμενος με βάση την κατάσταση των τριών χαρακτήρων και την παρουσία του σκυλιού της Annalyn. Διαφορετικά, επιστρέφει false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
F# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Η Παρείσφρηση της Annalyn;

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