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

A infiltração da Annalyn

Exercício de aprendizagem

Introdução

Booleanos em Julia

Os valores booleanos são representados pelo tipo Bool. Contém apenas dois valores: true e false.

julia> true
true

julia> false
false

Operadores Boolean

Há três operadores Boolean em Julia.

&& é o operador Boolean "e". É avaliado como true se as expressões em ambos os lados de && forem true.

julia> true && true
true

julia> true && false
false

|| é o operador Boolean "ou". É avaliado como true se uma expressão em qualquer dos lados de || for true.

julia> true || true
true

julia> false || true
true

! é o operador Boolean "não". Troca os valores true e false.

julia> !true
false

julia> !false
true

Para expressões mais longas e complicadas, é melhor usares parênteses para deixares clara a tua intenção.

julia> (true || false) && (false && true)
false

Instruções

Neste exercício, vais escrever alguma lógica para um videojogo 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: a sua melhor amiga é raptada enquanto procura bagas na floresta. A Annalyn vai tentar encontrar e libertar a amiga, podendo levar o cão com ela nesta missão.

A Annalyn acaba por encontrar o acampamento onde a amiga está presa e descobre que há dois raptores: um cavaleiro poderoso e um arqueiro astuto.

Ao jogador são apresentadas várias opções sobre o que fazer a seguir. Para cada uma das quatro opções possíveis, tens de escrever uma função que diz ao jogo se deve mostrar essa opção ou não.

1. Verifica se a opção «Ataque Rápido» deve ser mostrada

Se o cavaleiro estiver a dormir, a Annalyn conseguirá fazer um ataque rápido ao acampamento antes de ele acordar devidamente e vestir a armadura.

Implementa uma função chamada can_do_fast_attack que recebe um valor Boolean que indica se o cavaleiro está acordado. Esta função devolve true se a ação «Ataque Rápido» estiver disponível, com base no estado da personagem. Caso contrário, devolve false:

julia> knight_awake = true

julia> can_do_fast_attack(knight_awake)
false

2. Verifica se a opção «Espionar» deve ser mostrada

O grupo pode ser espionado se pelo menos um dos seus elementos estiver acordado. Caso contrário, espiar é uma perda de tempo.

Implementa uma função chamada can_spy que recebe três valores Boolean, que indicam se o cavaleiro, o arqueiro e a prisioneira, respetivamente, estão acordados. A função devolve true se a ação «Espionar» estiver disponível, com base no estado das personagens. Caso contrário, devolve false:

# Output suppressed from the next 3 lines
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false

julia> can_spy(knight_awake, archer_awake, prisoner_awake)
true

3. Verifica se a opção «Sinalizar a Prisioneira» deve ser mostrada

É possível sinalizar a prisioneira com sons de aves se ela estiver acordada e o arqueiro estiver a dormir. Se o arqueiro estiver acordado, não é possível sinalizá-la em segurança, porque o arqueiro também está treinado em sinais com sons de aves.

Implementa uma função chamada can_signal_prisoner que recebe dois valores Boolean, que indicam se o arqueiro e a prisioneira, respetivamente, estão acordados. A função devolve true se a ação «Sinalizar a Prisioneira» estiver disponível, com base no estado das personagens. Caso contrário, devolve false:

julia> archer_awake = false
julia> prisoner_awake = true

julia> can_signal_prisoner(archer_awake, prisoner_awake)
true

4. Verifica se a opção «Libertar a Prisioneira» deve ser mostrada

A Annalyn pode tentar entrar furtivamente no acampamento para libertar a amiga. É algo arriscado e só pode ter sucesso de uma de duas formas:

  • Se a Annalyn tiver o cão com ela, pode resgatar a prisioneira 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 a amiga conseguirem escapar.

  • Se a Annalyn não tiver o cão, ela e a prisioneira têm de ser muito furtivas! A Annalyn pode libertar a prisioneira se esta estiver acordada e o cavaleiro e o arqueiro estiverem ambos a dormir. Mas se a prisioneira estiver a dormir, não pode ser resgatada: assustar-se-ia com o aparecimento súbito da Annalyn e acordaria o cavaleiro e o arqueiro.

Implementa uma função chamada can_free_prisoner que recebe quatro valores Boolean. Os primeiros três parâmetros indicam se o cavaleiro, o arqueiro e a prisioneira, respetivamente, estão acordados. O último parâmetro indica se o cão da Annalyn está presente. A função devolve true se a ação «Libertar a Prisioneira» estiver disponível, com base no estado das personagens. Caso contrário, devolve false:

julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> dog_present = false

julia> can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present)
false
Editar via GitHub A ligação abre numa nova janela ou separador
Julia Exercism

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

Inscreve-te no Exercism para aprenderes e dominares Julia com 35 conceitos128 exercícios, e mentoria humana real, tudo grátis.