謎解き10. 時間制限付き謎解き(非同期処理)
シナリオ
プレイヤーは限られた時間内に魔法陣を活性化させなければならない。問題
3秒後に「魔法陣が活性化した!」と表示されるコードを書く。ヒント
3秒後に処理を実行する方法を考えて。答え
回答
console.log("魔法陣を準備中...")
setTimeout(() => {
console.log("魔法陣が活性化した!")
}, 3000)
解説
setTimeout(実行する関数, ⚪︎秒後に実行※ms 1000=1秒で記載)
謎解き11. ダンジョンの迷路生成(アルゴリズムの実装)
シナリオ
次のエリアに進むために、ダンジョンの迷路を生成する必要がある。問題
迷路を2D配列で表現し、特定のパターン(例: "壁"と"道")で生成するコードを書く。条件
1. 迷路のサイズは、縦:5、横:5で生成すること。 2. 壁をつけた状態で、左上に「スタート」右下に「ゴール」を設置すること。 3. 道はとりあえず、ランダムに生成しても良い。答え
回答
const rows = 5, cols = 5
const maze = Array.from({ length: rows }, () => Array(cols).fill("壁"))
for (let i = 1; i < rows - 1; i++) {
for (let j = 1; j < cols - 1; j++) {
maze[i][j] = Math.random() > 0.3 ? "道" : "壁"
}
}
maze[1][1] = "スタート"
maze[rows - 2][cols - 2] = "ゴール"
console.table(maze)
解説
- Array.from()は、色々なデータを配列にコンバートします。(または初期化) - Arrow(@1).fill(@2)は、@1配列の要素を、@2で埋める処理。 - 「スタート」
謎解き12. 魔法陣の探索
シナリオ
魔法陣が壊れており、「正しいエネルギーの流れ」を見つけて修復する必要がある。問題
ランダムに生成された魔法陣を数値の小さい順に並べて、不足している数値を追加するコードを書く。条件
- 魔法陣は次のようにランダムで生成されている。const MagicNumbers = Array.from({length:10}).map(e => Math.floor(Math.random() * 10))
console.log(MagicNumbers)
(例) [1, 6, 1, 3, 6, 7, 7, 2, 9, 2]
- 重複している数値は1つにまとめる
- [1,3]の様に、間が抜けている数値は2を追加して、[1,2,3]となるようにする。
答え
回答
const magicNumbers = Array.from({length:10}).map(e => Math.floor(Math.random() * 10))
const min = Math.min(...magicNumbers)
const max = Math.max(...magicNumbers)
const repaireNumbers = Array.from({length:max-min+1}).map((e,i,s) => {return i + min})
console.log(magicNumbers)
console.log(repaireNumbers)
解説
- 配列内の数値の最小値と最大値を取得して、それを順列に並べるだけで良い。 - for文で順列値を作っても良いが、.map()を使うと簡単に構築できる。
0 件のコメント:
コメントを投稿