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

A infiltração da Annalyn

Exercício de aprendizagem

Introdução

Booleanos

Os booleanos em F# são representados pelo tipo bool, cujos valores podem ser true ou false.

O F# suporta três operadores booleanos: not (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 está a desenvolver. A personagem principal do jogo é a Annalyn, uma rapariga valente com um cão de estimação feroz e leal. Infelizmente, o desastre acontece: o seu melhor amigo foi raptado enquanto procurava bagas na floresta. A Annalyn vai tentar encontrar e libertar o seu melhor amigo, levando opcionalmente o cão consigo nesta missão.

Depois de algum tempo a seguir o rasto do seu melhor amigo, encontra o acampamento onde ele está preso. 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 realizar:

  • 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, pois os arqueiros são treinados em sinais com aves e por isso podem intercetar a mensagem.
  • Libertar o prisioneiro: a Annalyn pode tentar entrar furtivamente no acampamento para libertar o prisioneiro. É uma coisa arriscada e só pode ter sucesso de uma de duas formas:
    • Se a Annalyn tiver o cão de estimação consigo, consegue resgatar 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 o prisioneiro estiver acordado e o cavaleiro e o arqueiro estiverem ambos a dormir, mas se o prisioneiro estiver a dormir não há forma de o resgatar: assustar-se-ia com o aparecimento súbito da Annalyn e acordaria o cavaleiro e o arqueiro.

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

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

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

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

2. Verifica se é possível espiar o grupo

Implementa a função canSpy, que recebe três valores Boolean, indicando se o cavaleiro, o arqueiro e o prisioneiro estão acordados, respetivamente. 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:

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

3. Verifica se é possível sinalizar o prisioneiro

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

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

4. Verifica se é possível libertar o prisioneiro

Implementa a função canFreePrisoner, que recebe quatro valores Boolean. Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro estão acordados, respetivamente. O último parâmetro indica se o cão de estimaçã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 de estimação da Annalyn. Caso contrário, devolve false:

let knightIsAwake = false
let archerIsAwake = true
let prisonerIsAwake = false
let petDogIsPresent = false
canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent)
// => false
Editar via GitHub A ligação abre numa nova janela ou separador
F# Exercism

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

Inscreve-te no Exercism para aprenderes e dominares F# com 18 conceitos148 exercícios, e mentoria humana real, tudo grátis.