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

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

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

Εισαγωγή

Boolean

Ο τύπος Bool είναι ένα από τα δομικά στοιχεία της γλώσσας. Σκοπός του είναι να περιγράφει αν κάτι είναι αληθές ή ψευδές, με τις αντίστοιχες τιμές True και False.

Τα Boolean (λογικές τιμές) μπορούν να συνδυαστούν με τους τελεστές && "AND" και || "OR", και να αντιστραφούν με τη συνάρτηση not.

Τα Boolean είναι επίσης εξαιρετικά χρήσιμα για να δημιουργείς διακλαδώσεις στον κώδικά σου που εκτελούνται μόνο αν πληρούνται ορισμένες συνθήκες. Στην Elm, αυτό γίνεται με μια έκφραση if-then-else, όπως φαίνεται παρακάτω.

if someCondition || (someOtherCondition && anotherCondition) then
    doSomething
else
    doSomethingElse

Οδηγίες

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

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

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

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

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

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

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

knightIsAwake = True

canFastAttack knightIsAwake
    --> False

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

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

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False

canSpy knightIsAwake archerIsAwake prisonerIsAwake
    --> True

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

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

archerIsAwake = False
prisonerIsAwake = True

canSignalPrisoner archerIsAwake prisonerIsAwake
    --> True

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

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

knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False

canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
    --> False

5. Υπολόγισε τη ζημιά που θα μπορούσε να προκαλέσει μια κρυφή επίθεση

Υλοποίησε τη συνάρτηση stealthAttackDamage που παίρνει μια τιμή Boolean που δείχνει αν η Annalyn έγινε αντιληπτή. Η συνάρτηση επιστρέφει 7 αν έγινε αντιληπτή, αλλιώς 12.

annalynIsDetected = True

stealthAttackDamage annalynIsDetected
    --> 7
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Elm Exercism

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

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