Track
/
F#
F#
/
Esercizi
/
L'infiltrazione di Annalyn
L'infiltrazione di Annalyn

L'infiltrazione di Annalyn

Esercizio di apprendimento

Introduzione

Valori booleani

In F#, i booleani sono rappresentati dal tipo bool, i cui valori possono essere true o false.

F# supporta tre operatori booleani: not (NOT), && (AND) e || (OR).

Istruzioni

In questo esercizio implementerai la logica delle missioni per un nuovo gioco di ruolo che sta sviluppando un amico. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane feroce e fedele. 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 e, se vuole, potrà portare con sé il cane in questa impresa.

Dopo aver seguito per un po' le tracce della sua migliore amica, trova l'accampamento in cui è tenuta prigioniera. Scopre che i rapitori sono due: un cavaliere possente ed un arciere astuto.

Ora che ha trovato i rapitori, Annalyn valuta quale delle seguenti azioni può intraprendere:

  • Attacco rapido: si può sferrare un attacco rapido se il cavaliere dorme: ci mette un po' a 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ò inviare un segnale al prigioniero imitando i versi degli uccelli se il prigioniero è sveglio e l'arciere dorme, dato che gli arcieri sono addestrati a riconoscere i segnali degli uccelli e potrebbero intercettare il messaggio.
  • Liberare il prigioniero: Annalyn può provare a intrufolarsi nell'accampamento per liberare il prigioniero. È un'impresa rischiosa e può riuscire solo in uno dei due modi seguenti:
    • Se Annalyn ha il cane con sé, può salvare il prigioniero se l'arciere dorme. Il cavaliere ha paura del cane e l'arciere non farà in tempo a prepararsi prima che Annalyn ed il prigioniero riescano a fuggire.
    • Se Annalyn non ha il cane, allora lei e il prigioniero devono muoversi con molta furtività! Annalyn può liberare il prigioniero se il prigioniero è sveglio e sia il cavaliere sia l'arciere dormono, ma se il prigioniero dorme non può essere salvato: 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 che si trovano nel bosco e alla presenza o meno del cane di Annalyn.

1. Verifica se si può sferrare un attacco rapido

Implementa la funzione canFastAttack, che riceve un valore booleano che indica se il cavaliere è sveglio. La funzione restituisce true se si può sferrare un attacco rapido in base allo stato del cavaliere. Altrimenti restituisce false:

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

2. Verifica se si può spiare il gruppo

Implementa la funzione canSpy, che riceve tre valori booleani che indicano rispettivamente se il cavaliere, l'arciere ed il prigioniero sono svegli. La funzione restituisce true se si può spiare il gruppo, in base allo stato dei tre personaggi. Altrimenti restituisce false:

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

3. Verifica se si può segnalare al prigioniero

Implementa la funzione canSignalPrisoner, che riceve due valori booleani che indicano rispettivamente se l'arciere e il prigioniero sono svegli. La funzione restituisce true se si può segnalare al prigioniero, in base allo stato dei due personaggi. Altrimenti restituisce false:

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

4. Verifica se si può liberare il prigioniero

Implementa la funzione canFreePrisoner, che riceve 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 si può liberare il prigioniero, in base allo stato dei tre personaggi e alla presenza del cane di Annalyn. Altrimenti restituisce false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
F# Exercism

Vuoi iniziare L'infiltrazione di Annalyn?

Iscriviti a Exercism per imparare e padroneggiare F# con 18 concetti148 esercizi e il mentoring di persone reali, tutto gratis.