この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
8. shuffle() を実装する
以下は、Array.prototype.sort()を利用したシンプルなshuffle()の実装例です。
function shuffle(array) {
array.sort(() => Math.random() - 0.5);
}
この方法は簡単ですが、偏りが生じやすいため、乱数生成器が偏っている場合、完全にシャッフルされる可能性が低くなります。より効率的かつ確実なシャッフルアルゴリズムとして、Fisher-Yatesシャッフルが挙げられます。
以下は、Fisher-Yatesシャッフルを利用したshuffle()の実装例です。
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
このアルゴリズムでは、配列の最後の要素からスタートし、前方に向かってランダムな要素を選択しながら、要素を交換していきます。このアルゴリズムによって、全ての順列が等しい確率で出現するようになります。