Track
/
Go
Go
/
Esercizi
/
L'infiltrazione di Annalyn
L'infiltrazione di Annalyn

L'infiltrazione di Annalyn

Esercizio di apprendimento

Introduzione

I booleani in Go sono rappresentati dal tipo booleano predefinito bool, i cui valori possono essere true o false. È un tipo definito.

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 supporta tre operatori logici che possono ridurre le espressioni a valori booleani, restituendo true o false.

Operatore Cosa significa
&& (and) È vero se entrambe le affermazioni sono vere.
|| (or) È vero se almeno un'affermazione è vera.
! (not) È vero solo se l'affermazione è falsa.

Istruzioni

In questo esercizio, implementerai la logica della quest per un nuovo gioco di ruolo che un amico sta sviluppando. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane fedele e feroce. Purtroppo arriva la catastrofe: la sua migliore amica è stata rapita mentre cercava bacche nel bosco. Annalyn proverà a trovare e liberare la sua migliore amica, portando con sé il cane, se lo desidera, in questa quest.

Dopo un po' di tempo passato a seguire le tracce della sua migliore amica, trova l'accampamento in cui è imprigionata. Scopre che i rapitori sono due: un cavaliere possente ed un arciere astuto.

Una volta trovati i rapitori, Annalyn valuta quali delle seguenti azioni può intraprendere:

  • Attacco rapido: si può sferrare un attacco rapido se il cavaliere dorme, perché ci vuole tempo per indossare l'armatura, quindi sarà vulnerabile.
  • Spionaggio: si può spiare il gruppo se almeno uno di loro è sveglio. Altrimenti, spiare è una perdita di tempo.
  • Segnalare al prigioniero: si può segnalare al prigioniero con versi di uccelli se il prigioniero è sveglio e l'arciere dorme, perché gli arcieri sono addestrati ai richiami degli uccelli e potrebbero intercettare il messaggio.
  • Liberare il prigioniero: Annalyn può provare ad intrufolarsi nell'accampamento per liberare il prigioniero. È un'azione rischiosa e può riuscire solo in uno dei due modi seguenti:
    • Se Annalyn ha con sé il cane, può salvare il prigioniero se l'arciere dorme. Il cavaliere ha paura del cane e l'arciere non avrà il tempo di prepararsi prima che Annalyn ed il prigioniero riescano a fuggire.
    • Se Annalyn non ha il cane, lei ed il prigioniero devono essere molto furtivi! Annalyn può liberare il prigioniero se il prigioniero è sveglio e sia il cavaliere che l'arciere dormono, ma se il prigioniero dorme non possono essere salvati: il prigioniero si spaventerebbe per l'apparizione improvvisa di Annalyn e sveglierebbe il cavaliere e l'arciere.

Hai quattro compiti: implementare la logica che determina se le azioni precedenti sono disponibili, in base allo stato dei tre personaggi trovati nel bosco ed alla presenza o meno del cane di Annalyn.

1. Verifica se è possibile sferrare un attacco rapido

Definisci la funzione CanFastAttack(), che accetta un valore booleano che indica se il cavaliere è sveglio. Questa funzione restituisce true se è possibile sferrare un attacco rapido in base allo stato del cavaliere. Altrimenti restituisce false:

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

2. Verifica se è possibile spiare il gruppo

Definisci la funzione CanSpy(), che accetta tre valori booleani che indicano, rispettivamente, se il cavaliere, l'arciere ed il prigioniero sono svegli. La funzione restituisce true se è possibile spiare il gruppo, in base allo stato dei tre personaggi. Altrimenti restituisce false:

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

3. Verifica se si può segnalare al prigioniero

Definisci la funzione CanSignalPrisoner(), che accetta due valori booleani che indicano, rispettivamente, se l'arciere ed il prigioniero sono svegli. La funzione restituisce true se si può segnalare al prigioniero, in base allo stato dei due personaggi. Altrimenti restituisce false:

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

4. Verifica se si può liberare il prigioniero

Definisci la funzione CanFreePrisoner(), che accetta quattro valori booleani. I primi tre parametri indicano, rispettivamente, se il cavaliere, l'arciere ed il prigioniero sono svegli. L'ultimo parametro indica se il cane di Annalyn è presente. La funzione restituisce true se il prigioniero può essere liberato, in base allo stato dei tre personaggi ed alla presenza del cane di Annalyn. Altrimenti restituisce false:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Go Exercism

Vuoi iniziare L'infiltrazione di Annalyn?

Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.