真か偽の値は、Bool型で表します。
Bool型が持つ値は、trueとfalseの2つだけです。
julia> true
true
julia> false
false
Juliaには、真偽値の演算子が3つあります。
&&は、真偽値の「and」を表します。
&&の両側の式がtrueのとき、結果はtrueになります。
julia> true && true
true
julia> true && false
false
||は、真偽値の「or」を表します。
||のどちらかの式がtrueのとき、結果はtrueになります。
julia> true || true
true
julia> false || true
true
!は、真偽値の「not」を表します。
trueとfalseを入れ替えます。
julia> !true
false
julia> !false
true
より長く複雑な式では、意図を明確にするために括弧(())を使うのがよいでしょう。
julia> (true || false) && (false && true)
false
この演習では、友人が開発しているビデオゲームのためのロジックを書きます。 ゲームの主人公は、勇敢な女の子のAnnalynです。彼女には、獰猛で忠実なペットの犬がいます。 ところが不幸なことに、親友が森でベリーを探しているときに誘拐され、災難が降りかかります。 Annalynは友人を見つけて解放しようとします。この冒険に、犬を連れて行ってもかまいません。
Annalynはやがて、友人が囚われている野営地を見つけます。誘拐犯は2人いました。強力な騎士と、ずる賢い射手です。
プレイヤーには、次に何をするかの選択肢がいくつか示されます。 4つの選択肢それぞれについて、その選択肢を表示すべきかどうかをゲームに伝える関数を書く必要があります。
騎士が眠っていれば、騎士が完全に目を覚まして鎧を身につける前に、Annalynは野営地へ素早く攻撃を仕掛けることができます。
騎士が起きているかどうかを示す真偽値を入力として受け取る、can_do_fast_attackという名前の関数を実装してください。
この関数は、キャラクターの状態に基づいて「速攻」アクションが使える場合にtrueを返します。それ以外の場合はfalseを返します。
julia> knight_awake = true
julia> can_do_fast_attack(knight_awake)
false
3人のうち少なくとも1人が起きていれば、スパイできます。そうでなければ、スパイは時間の無駄です。
騎士、射手、囚人がそれぞれ起きているかどうかを示す3つの真偽値を入力として受け取る、can_spyという名前の関数を実装してください。
この関数は、キャラクターたちの状態に基づいて「スパイ」アクションが使える場合にtrueを返します。
それ以外の場合は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
囚人が起きていて、射手が眠っていれば、鳥の鳴き声を使って囚人に合図を送ることができます。 射手が起きている場合は、射手も鳥の合図の訓練を受けているため、安全に合図を送ることができません。
射手と囚人がそれぞれ起きているかどうかを示す2つの真偽値を入力として受け取る、can_signal_prisonerという名前の関数を実装してください。
この関数は、キャラクターたちの状態に基づいて「囚人に合図」アクションが使える場合にtrueを返します。
それ以外の場合はfalseを返します。
julia> archer_awake = false
julia> prisoner_awake = true
julia> can_signal_prisoner(archer_awake, prisoner_awake)
true
Annalynは、友人を解放するために野営地へこっそり忍び込むことができます。これは危険な行為で、成功するのは次の2つの場合だけです。
Annalynがペットの犬を連れている場合、射手が眠っていれば囚人を救出できます。 騎士は犬を恐れており、Annalynと友人が逃げ出す前に射手が準備をする時間はありません。
Annalynが犬を連れていない場合は、Annalynと囚人がとても慎重に行動しなければなりません。 囚人が起きていて、騎士と射手がどちらも眠っていれば、Annalynは囚人を解放できます。しかし囚人が眠っている場合は救出できません。Annalynが突然現れると囚人は驚いて、騎士と射手を起こしてしまうからです。
4つの真偽値を入力として受け取る、can_free_prisonerという名前の関数を実装してください。
最初の3つの入力は、騎士、射手、囚人がそれぞれ起きているかどうかを示します。
最後の入力は、Annalynがペットの犬を連れているかどうかを示します。
この関数は、キャラクターたちの状態に基づいて「囚人を解放」アクションが使える場合にtrueを返します。それ以外の場合は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