謎解き4. モンスターの行動を予測するAIプログラム
シナリオ
敵のモンスターが特定のパターンで攻撃してくる。 行動パターンを解析し、次の攻撃を予測する必要がある。問題
プレイヤーは攻撃パターンの配列に対応する攻撃は、次の通りです。 敵の攻撃がランダムに来た時に、それに該当する攻撃を決定するプログラムを作る。プレイヤー攻撃パターン 1. hit(素手) 2. sward(剣) 3. magic(魔法) 4. defence(防御)
敵攻撃パターン : 1. threat(威嚇) 2. hit(殴る) 3. bite(噛みつき) 4. flame(火炎)※敵モンスターの攻撃は、"monster_attack"という変数に格納されてくる。その場合に、プレイヤーの攻撃を決定するプログラムを作成せよ。
答え
回答
function get_next_attach(monster_attack){
const monster_attacks = ["threat", "hit", "bite", "flame"]
const player_attacks = ["hit", "sward", "magic", "defence"]
const monster_attack_index = monster_attacks.findIndex(e => e === monster_attack)
if(monster_attack_index === null){
return "no-data"
}
else{
return player_attacks[monster_attack_index]
}
}
console.log(get_next_attach("bite")) // "magic"
解説
- monster_attacks.findIndex(...)は、敵のモンスターの攻撃が配列の何番に格納されているかを取得する処理 - 取得した敵モンスターの攻撃番号を、プレイヤー攻撃の配列に当てはめるだけで、次の攻撃が取得できる。
謎解き5. 宝箱のロック解除(並べ替え)
シナリオ
宝箱がランダムな数列の暗証番号でロックされている。並べ替えることで開けられる。問題
数字を昇順に並べ替えるコードを書く。 ランダムに書かれている数値 : [5, 2, 9, 1, 7]答え
回答
let lockCode = [5, 2, 9, 1, 7]
let sortedCode = lockCode.sort((a, b) => a - b)
console.log(sortedCode) // [1, 2, 5, 7, 9]
解説
- javascriptのsort()関数は、条件関数を書くことができる。 - a-bは、前後数値を比較して、マイナスを返すと並びを逆にする処理が行われる。(プラスを返すと並び順の変更は無し) - sort()関数は、if文などを使った複雑な条件を書く事もできる。
謎解き6. マップの探索ログを最適化
シナリオ
冒険中に移動した地点が記録されているが、重複している部分があり効率的にまとめる必要がある。問題
重複する地点を削除して記録を最適化する。行った場所: - forest(森) - cave(洞窟) - castle(お城)
記録データ: "forest" > "cave" > "forest" > "castle"
答え
回答
let visitedPlaces = ["forest", "cave", "forest", "castle"]
let uniquePlaces = [...new Set(visitedPlaces)]
console.log(uniquePlaces); // ["forest", "cave", "castle"]
解説
- 配列に対して、"new Set(配列)"を実行すると、同じ値を削除してくれる重複削除が行える。 - "... + 配列"という記述は、スプレッド構文と言われ、配列を展開する処理で、配列同士を繋げる時などに使えます。 - [...new Set(visitedPlaces)]は、Array.from(new Set(visitedPlaces))と書いても同じ結果が得られる。
0 件のコメント:
コメントを投稿