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

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

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

Εισαγωγή

Οι Boolean (λογικές τιμές) στη Go αντιπροσωπεύονται από τον προδηλωμένο boolean τύπο bool, του οποίου οι τιμές μπορούν να είναι είτε true είτε false. Είναι ένας ορισμένος τύπος.

var closed bool    // boolean variable 'closed' implicitly initialized with 'false'
speeding := true   // boolean variable 'speeding' initialized with 'true'
hasError := false  // boolean variable 'hasError' initialized with 'false' 

Η Go υποστηρίζει τρεις λογικούς τελεστές που μπορούν να αξιολογήσουν εκφράσεις σε τιμές Boolean, επιστρέφοντας είτε true είτε false.

Τελεστής Τι σημαίνει
&& (και) Είναι αληθής αν και οι δύο προτάσεις είναι αληθείς.
|| (ή) Είναι αληθής αν τουλάχιστον μία πρόταση είναι αληθής.
! (όχι) Είναι αληθής μόνο αν η πρόταση είναι ψευδής.

Οδηγίες

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

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

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

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

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

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

Όρισε τη συνάρτηση CanFastAttack() που παίρνει μία τιμή Boolean (λογική τιμή) που δείχνει αν ο ιππότης είναι ξύπνιος. Αυτή η συνάρτηση επιστρέφει true αν μπορεί να γίνει γρήγορη επίθεση με βάση την κατάσταση του ιππότη. Διαφορετικά, επιστρέφει false:

var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false

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

Όρισε τη συνάρτηση CanSpy() που παίρνει τρεις τιμές Boolean, που δείχνουν αν ο ιππότης, ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν μπορείς να κατασκοπεύσεις την ομάδα, με βάση την κατάσταση των τριών χαρακτήρων. Διαφορετικά, επιστρέφει false:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true

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

Όρισε τη συνάρτηση CanSignalPrisoner() που παίρνει δύο τιμές Boolean, που δείχνουν αν ο τοξότης και ο κρατούμενος, αντίστοιχα, είναι ξύπνιοι. Η συνάρτηση επιστρέφει true αν μπορείς να δώσεις σήμα στον κρατούμενο, με βάση την κατάσταση των δύο χαρακτήρων. Διαφορετικά, επιστρέφει false:

var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true

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

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

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Go Exercism

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

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