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

L'infiltrazione di Annalyn

Esercizio di apprendimento

Introduzione

In Clojure i valori booleani sono rappresentati da true o false.

Le funzioni predicato (funzioni che restituiscono un valore booleano) di solito terminano con un punto interrogativo (?), ma questa è solo una convenzione.

La libreria core include funzioni per gli operatori logici come not, and e or.

Istruzioni

In questo esercizio implementerai la logica della missione per un nuovo gioco di ruolo che sta sviluppando un tuo amico. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane da compagnia fiero e fedele. Purtroppo, arriva la catastrofe: il suo migliore amico è stato rapito mentre cercava le bacche nel bosco. Annalyn cercherà di trovarlo e salvarlo, con la possibilità di portare con sé il suo cane in questa missione.

Dopo aver seguito per un po' le tracce, Annalyn scopre l'accampamento in cui il suo amico è tenuto prigioniero. Scopre che i rapitori sono due: un possente cavaliere e un astuto arciere.

Dopo aver trovato i rapitori, Annalyn valuta quali delle seguenti azioni può intraprendere:

  • Attacco rapido: si può sferrare un attacco rapido se il cavaliere sta dormendo, perché gli serve tempo per indossare l'armatura, il che lo lascia vulnerabile.
  • Spia: si può spiare il gruppo se almeno uno dei suoi membri è sveglio. Altrimenti, spiare è una perdita di tempo.
  • Segnala al prigioniero: si può segnalare la propria presenza al prigioniero usando versi di uccelli se il prigioniero è sveglio e l'arciere dorme. Gli arcieri sono addestrati ai richiami degli uccelli e potrebbero intercettare il messaggio se sono svegli.
  • Libera 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 con sé il suo 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 e il prigioniero riescano a fuggire.
    • Se Annalyn non ha il suo cane, lei e il prigioniero devono essere molto furtivi! Annalyn può liberare il prigioniero se il prigioniero è sveglio e sia il cavaliere sia l'arciere dormono. Tuttavia, 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 descritte sopra 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 can-fast-attack?, 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:

(def knight-awake? true)

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

2. Verifica se il gruppo può essere spiato

Implementa la funzione can-spy?, che riceve tre valori booleani che indicano rispettivamente se il cavaliere, l'arciere e il prigioniero sono svegli. La funzione restituisce true se il gruppo può essere spiato, in base allo stato dei tre personaggi. Altrimenti restituisce false:

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

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

3. Verifica se si può segnalare al prigioniero

Implementa la funzione can-signal-prisoner?, 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:

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

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

4. Verifica se il prigioniero può essere liberato

Implementa la funzione can-free-prisoner?, che riceve quattro valori booleani. I primi tre parametri indicano rispettivamente se il cavaliere, l'arciere e 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 e alla presenza del cane di Annalyn. Altrimenti restituisce 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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Clojure Exercism

Vuoi iniziare L'infiltrazione di Annalyn?

Iscriviti a Exercism per imparare e padroneggiare Clojure con 12 concetti105 esercizi e il mentoring di persone reali, tutto gratis.