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

A infiltração de Annalyn

Exercício de aprendizagem

Introdução

Em Go, os Boolean são representados pelo tipo booleano predeclarado bool, cujos valores podem ser true ou false. É um tipo definido.

var closed bool    // boolean variable 'closed' implicitly initialized with 'false'
speeding := true   // boolean variable 'speeding' initialized with 'true'
hasError := false  // boolean variable 'hasError' initialized with 'false' 

Go oferece três operadores lógicos que podem reduzir expressões a valores Boolean, retornando true ou false.

Operador O que significa
&& (and) É verdadeiro se as duas afirmações forem verdadeiras.
|| (or) É verdadeiro se pelo menos uma afirmação for verdadeira.
! (not) É verdadeiro apenas se a afirmação for falsa.

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. O personagem principal do jogo é Annalyn, uma garota corajosa com um cachorro de estimação feroz e leal. Infelizmente, o desastre acontece: seu melhor amigo foi sequestrado enquanto procurava frutinhas na floresta. Annalyn vai tentar encontrar e libertar seu melhor amigo, podendo levar o cachorro com ela nessa missão.

Depois de algum tempo seguindo a trilha do seu melhor amigo, ela encontra o acampamento onde ele está preso. Acontece que há dois sequestradores: um cavaleiro poderoso e um arqueiro astuto.

Tendo encontrado os sequestradores, Annalyn considera quais das seguintes ações ela pode realizar:

  • Ataque rápido: um ataque rápido pode ser feito se o cavaleiro estiver dormindo, já que ele leva tempo para vestir a armadura, então ficará vulnerável.
  • Espionagem: o grupo pode ser espionado se pelo menos um deles estiver acordado. Caso contrário, espionar é perda de tempo.
  • Sinalizar o prisioneiro: o prisioneiro pode ser sinalizado usando sons de pássaros se o prisioneiro estiver acordado e o arqueiro estiver dormindo, pois arqueiros são treinados em sinalização com pássaros, então poderiam interceptar a mensagem.
  • Libertar o prisioneiro: Annalyn pode tentar entrar furtivamente no acampamento para libertar o prisioneiro. Isso é arriscado 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 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 precisam ser muito 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 ele não pode ser resgatado: 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 encontrados na floresta e se o cachorro de Annalyn está presente ou não.

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

Defina a função CanFastAttack() que recebe um valor Boolean 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:

var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false

2. Verifique se o grupo pode ser espionado

Defina 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 o grupo puder ser espionado, com base no estado dos três personagens. Caso contrário, retorna false:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true

3. Verifique se o prisioneiro pode ser sinalizado

Defina 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 o prisioneiro puder ser sinalizado, com base no estado dos dois personagens. Caso contrário, retorna false:

var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true

4. Verifique se o prisioneiro pode ser libertado

Defina 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 o prisioneiro puder ser libertado com base no estado dos três personagens e na presença do cachorro de Annalyn. Caso contrário, retorna false:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Editar via GitHub O link abre em uma nova janela ou aba
Go Exercism

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

Crie sua conta no Exercism para aprender e dominar Go com 34 conceitos165 exercícios e mentoria humana de verdade, tudo de graça.