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).
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:
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.
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
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
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
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
Inscreve-te no Exercism para aprenderes e dominares F# com 18 conceitos148 exercícios, e mentoria humana real, tudo grátis.