トラック
/
Java
Java
/
演習
/
アナリンの潜入
アナリンの潜入

アナリンの潜入

学習演習

はじめに

真偽値

Javaの真偽値はboolean型で表し、その値はtrueかfalseのどちらかです。

Javaでは、3つの真偽値演算子を使うことができます。

  • !(NOT):真偽値を反転させます
  • &&(AND):2つの真偽値を受け取り、どちらもtrueであればtrueを返します
  • ||(OR):2つの真偽値のどちらかがtrueであればtrueを返します

例

!true // => false
!false // => true
true && false // => false
true && true // => true
false || false // => false
false || true // => true

説明

この演習では、友人が開発している新しいRPGゲームのクエストロジックを実装します。 ゲームの主人公はアナリン。勇敢な女の子で、獰猛ながら忠実な飼い犬を連れています。 ところが、災難が降りかかります。彼女の親友が森でベリーを探しているときに誘拐されてしまったのです。 アナリンは友人を見つけて救出しようとします。クエストに犬を連れていくかどうかは自由です。

しばらく道をたどったあと、アナリンは友人が囚われている野営地を見つけます。 誘拐犯は2人いました。強力な騎士と、ずる賢い射手です。

誘拐犯を見つけたアナリンは、次のうちどの行動を取れるかを考えます。

  • 速攻:騎士が眠っていれば速攻できます。鎧を着るのに時間がかかり、その間は無防備になるからです。
  • スパイ:少なくとも1人が起きていれば、一行を偵察できます。 そうでなければ、偵察は時間の無駄です。
  • 囚人に合図を送る:囚人が起きていて、射手が眠っていれば、鳥の鳴き声を使って囚人に合図を送れます。 射手は鳥を使った合図の訓練を受けており、起きていればメッセージを傍受される可能性があります。
  • 囚人を解放する:アナリンは囚人を解放するために、野営地に忍び込むことを試みられます。 これは危険で、次の2つのうちどちらかでしか成功しません。
    • アナリンが飼い犬を連れていれば、射手が眠っているときに囚人を救出できます。 騎士は犬を怖がり、アナリンと囚人が逃げる前に射手が準備する時間はありません。
    • 飼い犬を連れていなければ、アナリンと囚人はとても慎重に動く必要があります!  アナリンは、囚人が起きていて、騎士と射手の両方が眠っているときに囚人を解放できます。 ただし、囚人が眠っていると救出できません。アナリンの突然の登場に囚人が驚いて、騎士と射手を起こしてしまうからです。

タスクは4つあります。森にいる3人の状態と、アナリンの飼い犬がいるかどうかに基づいて、上記の行動が取れるかどうかを判断するロジックを実装しましょう。

1. 速攻ができるかどうかを確認する

(static)AnnalynsInfiltration.canFastAttack()メソッドを実装します。このメソッドは、騎士が起きているかどうかを示す真偽値を受け取ります。 このメソッドは、騎士の状態に基づいて速攻ができる場合はtrueを返します。 それ以外の場合はfalseを返します。

boolean knightIsAwake = true;
AnnalynsInfiltration.canFastAttack(knightIsAwake);
// => false

2. 一行を偵察できるかどうかを確認する

(static)AnnalynsInfiltration.canSpy()メソッドを実装します。このメソッドは、騎士、射手、囚人がそれぞれ起きているかどうかを示す3つの真偽値を受け取ります。 このメソッドは、3人の状態に基づいて一行を偵察できる場合はtrueを返します。 それ以外の場合はfalseを返します。

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
AnnalynsInfiltration.canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. 囚人に合図を送れるかどうかを確認する

(static)AnnalynsInfiltration.canSignalPrisoner()メソッドを実装します。このメソッドは、射手と囚人がそれぞれ起きているかどうかを示す2つの真偽値を受け取ります。 このメソッドは、2人の状態に基づいて囚人に合図を送れる場合はtrueを返します。 それ以外の場合はfalseを返します。

boolean archerIsAwake = false;
boolean prisonerIsAwake = true;
AnnalynsInfiltration.canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. 囚人を解放できるかどうかを確認する

(static)AnnalynsInfiltration.canFreePrisoner()メソッドを実装します。このメソッドは4つの真偽値を受け取ります。 最初の3つの仮引数は、騎士、射手、囚人がそれぞれ起きているかどうかを示します。 最後の仮引数は、アナリンの飼い犬がいるかどうかを示します。 このメソッドは、3人の状態とアナリンの飼い犬の有無に基づいて囚人を解放できる場合はtrueを返します。 それ以外の場合はfalseを返します。

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
boolean petDogIsPresent = false;
AnnalynsInfiltration.canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Java Exercism

アナリンの潜入を始める準備はできましたか?

Exercismに登録すれば、26個のコンセプト158個の演習、そして本物の人間によるメンタリングとともに、Javaを学んでマスターできます。すべて無料です。