Percursos
/
Clojure
Clojure
/
Exercícios
/
A infiltração da Annalyn
A infiltração da Annalyn

A infiltração da Annalyn

Exercício de aprendizagem

Introdução

Os Boolean em Clojure são representados por true ou false.

As funções de predicado (funções que devolvem um Boolean) costumam terminar com um ponto de interrogação (?), mas isto é apenas uma convenção.

A biblioteca principal inclui funções para operadores lógicos como not, and e or.

Instruções

Neste exercício, vais implementar a lógica da missão de um novo jogo de RPG que um amigo teu está a desenvolver. A personagem principal do jogo é a Annalyn, uma rapariga corajosa com um cão de estimação feroz e leal. Infelizmente, o desastre bate à porta: a sua melhor amiga foi raptada enquanto procurava frutos silvestres na floresta. A Annalyn vai tentar encontrar e resgatar a sua amiga, podendo levar o cão com ela nesta missão.

Depois de algum tempo a seguir o rasto, a Annalyn encontra o acampamento onde a sua amiga está presa. Acontece que há dois raptores: um cavaleiro poderoso e um arqueiro astuto.

Depois de encontrar os raptores, a Annalyn pensa em qual das seguintes ações pode fazer:

  • Ataque rápido: é possível fazer um ataque rápido se o cavaleiro estiver a dormir, pois ele demora algum tempo a vestir a armadura, o que o torna vulnerável.
  • Espiar: é possível espiar o grupo se pelo menos um deles estiver acordado. Caso contrário, espiar é uma perda de tempo.
  • Sinalizar o prisioneiro: é possível sinalizar o prisioneiro com sons de aves se o prisioneiro estiver acordado e o arqueiro estiver a dormir. Os arqueiros são treinados em sinais de aves e poderiam intercetar a mensagem se estiverem acordados.
  • Libertar o prisioneiro: a Annalyn pode tentar entrar furtivamente no acampamento para libertar o prisioneiro. É arriscado e só pode resultar de uma de duas formas:
    • Se a Annalyn tiver o cão, pode libertar o prisioneiro se o arqueiro estiver a dormir. O cavaleiro tem medo do cão e o arqueiro não terá tempo de se preparar antes de a Annalyn e o prisioneiro conseguirem escapar.
    • Se a Annalyn não tiver o cão, ela e o prisioneiro têm de ser muito furtivos! A Annalyn pode libertar o prisioneiro se este estiver acordado e o cavaleiro e o arqueiro estiverem ambos a dormir. No entanto, se o prisioneiro estiver a dormir, não pode ser libertado, pois assustar-se-ia com o aparecimento repentino da Annalyn e acordaria o cavaleiro e o arqueiro.

Tens quatro tarefas: implementar a lógica que determina se as ações acima estão disponíveis, com base no estado das três personagens na floresta e na presença ou não do cão da Annalyn.

1. Verifica se é possível fazer um ataque rápido

Implementa a função can-fast-attack?, que recebe um valor Boolean que indica se o cavaleiro está acordado. A função devolve true se for possível fazer um ataque rápido, com base no estado do cavaleiro. Caso contrário, devolve false:

(def knight-awake? true)

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

2. Verifica se é possível espiar o grupo

Implementa a função can-spy?, que recebe três valores Boolean que indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se for possível espiar o grupo, com base no estado das três personagens. Caso contrário, devolve 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 é possível sinalizar o prisioneiro

Implementa a função can-signal-prisoner?, que recebe dois valores Boolean que indicam se o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se for possível sinalizar o prisioneiro, com base no estado das duas personagens. Caso contrário, devolve false:

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

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

4. Verifica se é possível libertar o prisioneiro

Implementa a função can-free-prisoner?, que recebe quatro valores Boolean. Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. O último parâmetro indica se o cão da Annalyn está presente. A função devolve true se for possível libertar o prisioneiro, com base no estado das três personagens e na presença do cão da Annalyn. Caso contrário, devolve 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
Editar via GitHub A ligação abre numa nova janela ou separador
Clojure Exercism

Estás pronto para começar A infiltração da Annalyn?

Inscreve-te no Exercism para aprenderes e dominares Clojure com 12 conceitos105 exercícios, e mentoria humana real, tudo grátis.