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

A infiltração da Annalyn

Exercício de aprendizagem

Introdução

Os booleanos em Go 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 suporta três operadores lógicos que podem avaliar expressões até obter valores booleanos, devolvendo true ou false.

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

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 corajosa com um cão de estimação feroz e leal. Infelizmente, o desastre acontece: o seu melhor amigo foi sequestrado enquanto procurava bagas na floresta. A Annalyn vai tentar encontrar e libertar o seu melhor amigo, podendo levar o cão com ela 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 sequestradores: um cavaleiro poderoso e um arqueiro astuto.

Depois de encontrar os sequestradores, a Annalyn considera quais das seguintes ações pode realizar:

  • Ataque rápido: pode fazer-se um ataque rápido se o cavaleiro estiver a dormir, pois ele demora algum tempo a vestir a armadura, por isso ficará vulnerável.
  • Espiar: pode espiar-se o grupo se pelo menos um deles estiver acordado. Caso contrário, espiar é uma perda de tempo.
  • Sinalizar o prisioneiro: pode sinalizar-se o prisioneiro com sons de aves se o prisioneiro estiver acordado e o arqueiro estiver a dormir, pois os arqueiros são treinados em sinalização com aves e poderiam intercetar a mensagem.
  • Libertar o prisioneiro: a Annalyn pode tentar entrar furtivamente no acampamento para libertar o prisioneiro. É uma ação arriscada e só pode ter sucesso de uma de duas formas:
    • Se a Annalyn tiver o cão com ela, pode 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, entã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 pode ser resgatado: o prisioneiro seria surpreendido pelo 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. Verificar se é possível fazer um ataque rápido

Define 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:

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

2. Verificar se é possível espiar o grupo

Define a função CanSpy() que recebe três valores boolean que indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. 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:

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

3. Verificar se é possível sinalizar o prisioneiro

Define a função CanSignalPrisoner() que recebe dois valores boolean que indicam se o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se for possível sinalizar o prisioneiro, com base no estado das duas personagens. Caso contrário, devolve false:

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

4. Verificar se é possível libertar o prisioneiro

Define a função CanFreePrisoner() que recebe quatro valores boolean. Os primeiros três parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. 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:

var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
Editar via GitHub A ligação abre numa nova janela ou separador
Go Exercism

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

Inscreve-te no Exercism para aprenderes e dominares Go com 34 conceitos165 exercícios, e mentoria humana real, tudo grátis.