この解答例は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]];
  }
}

このアルゴリズムでは、配列の最後の要素からスタートし、前方に向かってランダムな要素を選択しながら、要素を交換していきます。このアルゴリズムによって、全ての順列が等しい確率で出現するようになります。