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

A infiltração de Annalyn

Exercício de aprendizagem

Introdução

Boolean

Em F#, os Boolean são representados pelo tipo bool: seus valores podem ser true ou false.

O F# oferece três operadores booleanos: not (NÃO), && (E) e || (OU).

Instruções

Neste exercício, você vai implementar a lógica de 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: seu melhor amigo foi sequestrado enquanto procurava frutas na floresta. Annalyn vai tentar encontrar e libertar seu melhor amigo, podendo levar o cachorro com ela nessa missão.

Depois de passar um tempo seguindo as pistas de seu melhor amigo, ela encontra o acampamento onde ele está preso. Acontece que há 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: dá para fazer um ataque rápido se o cavaleiro estiver dormindo, já que ele leva tempo para vestir a armadura e, por isso, fica vulnerável.
  • Espionar: dá para espionar o grupo se pelo menos um deles estiver acordado. Caso contrário, espionar é perda de tempo.
  • Sinalizar ao prisioneiro: dá para sinalizar ao prisioneiro usando sons de pássaros se o prisioneiro estiver acordado e o arqueiro estiver dormindo, já que os arqueiros são treinados em sinais de pássaros e poderiam interceptar a mensagem.
  • Libertar o prisioneiro: Annalyn pode tentar se esgueirar até o acampamento para libertar o prisioneiro. É uma coisa arriscada de fazer e só pode dar certo de duas maneiras:
    • Se Annalyn estiver com seu cachorro, ela pode resgatar o prisioneiro se o arqueiro estiver dormindo. O cavaleiro tem medo do cachorro e o arqueiro não vai ter tempo de se preparar antes que Annalyn e o prisioneiro consigam escapar.
    • Se Annalyn não estiver com o cachorro, ela e o prisioneiro vão precisar ser bem furtivos! Annalyn pode libertar o prisioneiro se o prisioneiro estiver acordado e o cavaleiro e o arqueiro estiverem dormindo, mas se o prisioneiro estiver dormindo não dá para resgatá-lo: ele levaria um susto com a aparição repentina 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 encontrados na floresta e em se o cachorro de Annalyn está presente ou não.

1. Verificar se dá para fazer um ataque rápido

Implemente a função canFastAttack, que recebe um valor Boolean que indica se o cavaleiro está acordado. Essa função retorna true se dá para fazer um ataque rápido com base no estado do cavaleiro. Caso contrário, retorna false:

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

2. Verificar se dá para espionar o grupo

Implemente a função canSpy, que recebe três valores Boolean, indicando se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna true se dá para espionar o grupo, com base no estado dos três personagens. Caso contrário, retorna false:

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

3. Verificar se dá para sinalizar ao prisioneiro

Implemente a função canSignalPrisoner, que recebe dois valores Boolean, indicando se o arqueiro e o prisioneiro, respectivamente, estão acordados. A função retorna true se dá para sinalizar ao prisioneiro, com base no estado dos dois personagens. Caso contrário, retorna false:

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

4. Verificar se dá para libertar o prisioneiro

Implemente a função canFreePrisoner, que recebe quatro valores Boolean. 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 Annalyn está presente. A função retorna true se dá para libertar o prisioneiro com base no estado dos três personagens e na presença do cachorro de Annalyn. Caso contrário, retorna false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Editar via GitHub O link abre em uma nova janela ou aba
F# Exercism

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

Crie sua conta no Exercism para aprender e dominar F# com 18 conceitos148 exercícios e mentoria humana de verdade, tudo de graça.