Trilhas
/
Clojure
Clojure
/
Exercícios
/
A infiltração de Annalyn
A infiltração de Annalyn

A infiltração de 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 retornam um boolean) costumam terminar com um ponto de interrogação (?), mas isso é apenas uma convenção.

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

Instruções

Neste exercício, você vai implementar a lógica da missão de um novo jogo de RPG que um amigo está desenvolvendo. A personagem principal do jogo é Annalyn, uma garota corajosa que tem um cachorro de estimação, feroz e leal. Infelizmente, o desastre acontece: sua melhor amiga foi sequestrada enquanto procurava frutas silvestres na floresta. Annalyn vai tentar encontrar e resgatar sua amiga, podendo levar o cachorro com ela nessa missão.

Depois de algum tempo seguindo o rastro, Annalyn encontra o acampamento onde sua amiga está presa. Acontece que são dois sequestradores: um cavaleiro poderoso e um arqueiro astuto.

Depois de encontrar os sequestradores, Annalyn pensa em quais das ações a seguir ela pode realizar:

  • Ataque rápido: um ataque rápido pode ser feito se o cavaleiro estiver dormindo, já que ele leva um tempo para vestir a armadura, o que o deixa vulnerável.
  • Espionar: o grupo pode ser espionado se pelo menos um deles estiver acordado. Caso contrário, espionar é perda de tempo.
  • Sinalizar para o prisioneiro: é possível sinalizar para o prisioneiro usando sons de pássaros se o prisioneiro estiver acordado e o arqueiro estiver dormindo. Arqueiros são treinados em sinalização com pássaros e poderiam interceptar a mensagem se estiverem acordados.
  • Libertar o prisioneiro: Annalyn pode tentar entrar escondida no acampamento para libertar o prisioneiro. Isso é arriscado e só pode dar certo de duas maneiras:
    • Se Annalyn estiver com seu cachorro de estimação, ela pode resgatar o prisioneiro se o arqueiro estiver dormindo. O cavaleiro tem medo do cachorro e o arqueiro não terá tempo de se preparar antes que Annalyn e o prisioneiro consigam escapar.
    • Se Annalyn não estiver com o cachorro de estimação, ela e o prisioneiro precisam ser muito furtivos! Annalyn pode libertar o prisioneiro se o prisioneiro estiver acordado e o cavaleiro e o arqueiro estiverem ambos dormindo. No entanto, se o prisioneiro estiver dormindo, ele não pode ser resgatado, pois o prisioneiro se assustaria com o aparecimento repentino de Annalyn e acordaria o cavaleiro e o arqueiro.

Você tem quatro tarefas: implementar a lógica para determinar se as ações acima estão disponíveis, com base no estado dos três personagens na floresta e na presença ou não do cachorro de estimação de Annalyn.

1. Verifique se um ataque rápido pode ser feito

Implemente a função can-fast-attack? que recebe um valor booleano que indica se o cavaleiro está acordado. Essa função retorna true se um ataque rápido puder ser feito com base no estado do cavaleiro. Caso contrário, retorna false:

(def knight-awake? true)

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

2. Verifique se o grupo pode ser espionado

Implemente a função can-spy? que recebe três valores booleanos, indicando se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna true se o grupo puder ser espionado, com base no estado dos três personagens. Caso contrário, retorna false:

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

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

3. Verifique se é possível sinalizar para o prisioneiro

Implemente a função can-signal-prisoner? que recebe dois valores booleanos, indicando se o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna true se for possível sinalizar para o prisioneiro, com base no estado dos dois personagens. Caso contrário, retorna false:

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

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

4. Verifique se é possível libertar o prisioneiro

Implemente a função can-free-prisoner? que recebe quatro valores booleanos. Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados. O último parâmetro indica se o cachorro de estimação de Annalyn está presente. A função retorna true se for possível libertar o prisioneiro, com base no estado dos três personagens e na presença do cachorro de estimação de Annalyn. Caso contrário, retorna 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 O link abre em uma nova janela ou aba
Clojure Exercism

Tudo pronto para começar A infiltração de Annalyn?

Crie sua conta no Exercism para aprender e dominar Clojure com 12 conceitos105 exercícios e mentoria humana de verdade, tudo de graça.