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

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

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

Εισαγωγή

Στη Clojure, οι τιμές Boolean αναπαρίστανται με true ή false.

Οι συναρτήσεις κατηγορήματος (συναρτήσεις που επιστρέφουν μια τιμή Boolean) συνήθως τελειώνουν με ερωτηματικό (?), αλλά αυτό είναι μόνο θέμα σύμβασης.

Η βασική βιβλιοθήκη περιλαμβάνει συναρτήσεις για λογικούς τελεστές, όπως not, and και or.

Οδηγίες

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

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

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

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

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

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

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

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

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

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

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

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

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

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

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

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

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Clojure Exercism

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

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