// @ts-check
//
// ☝🏽 The line above enables type checking for this file. Various IDEs interpret
// the @ts-check directive. It will give you helpful autocompletion on the web
// and supported IDEs when implementing this exercise. You don't need to
// understand types, JSDoc, or TypeScript in order to complete this JavaScript
// exercise, and can completely ignore this comment block and directive.
// 👋🏽 Hi again!
//
// A quick reminder about exercise stubs:
//
// 💡 You're allowed to completely clear any stub before you get started. Often
// we recommend using the stub, because they are already set-up correctly to
// work with the tests, which you can find in ./annalyns-infiltration.spec.js.
//
// 💡 You don't need to write JSDoc comment blocks yourself; it is not expected
// in idiomatic JavaScript, but some companies and style-guides do enforce them.
//
// Now help Annalyn free her best friend!
/**
* The fast attack is available when the knight is sleeping
*
* @param {boolean} knightIsAwake
*
* @return {boolean} Whether or not you can execute a fast attack.
*/
export function canExecuteFastAttack(knightIsAwake) {
return knightIsAwake == false;
}
/**
* A useful spy captures information, which they can't do if everyone's asleep.
*
* @param {boolean} knightIsAwake
* @param {boolean} archerIsAwake
* @param {boolean} prisonerIsAwake
*
* @returns {boolean} Whether or not you can spy on someone.
*/
export function canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake) {
return knightIsAwake == true || archerIsAwake == true || prisonerIsAwake == true;
}
/**
* You'll get caught by the archer if you signal while they're awake.
*
* @param {boolean} archerIsAwake
* @param {boolean} prisonerIsAwake
*
* @returns {boolean} Whether or not you can send a signal to the prisoner.
*/
export function canSignalPrisoner(archerIsAwake, prisonerIsAwake) {
return archerIsAwake == false && prisonerIsAwake == true;
}
/**
* The final stage in the plan: freeing Annalyn's best friend.
*
* @param {boolean} knightIsAwake
* @param {boolean} archerIsAwake
* @param {boolean} prisonerIsAwake
* @param {boolean} petDogIsPresent
*
* @returns {boolean} Whether or not you can free Annalyn's friend.
*/
export function canFreePrisoner(
knightIsAwake,
archerIsAwake,
prisonerIsAwake,
petDogIsPresent
) {
return (petDogIsPresent==true && archerIsAwake == false) || (prisonerIsAwake == true && knightIsAwake==false && archerIsAwake == false);
}