カードのシャッフル・アルゴリズムFisher–Yates(フィッシャー・イェーツ)を試してみた。意外とランダムはあってもシャッフルって初めてかも…。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 同じ番号のカードを2枚ずつ生成。 const card_num = 10; let card = []; for(let i=0; i<(card_num/2); i++){ card[i] = i; card[(card_num-1) - i] = i; } // [0, 1, 2, 3, 4, 4, 3, 2, 1, 0] console.log(card); // カードをシャッフル。Fisher–Yates(フィッシャー・イェーツ)アルゴリズムを用いる方法 // カード枚数だけ入れ替えをする。後ろから1枚ずつ(num-1,num-2,num-3...2,1,0) for(let i = card.length - 1; i > 0; i--) { // 交換するカードを、ランダムで決定 var i_change = Math.floor(Math.random() * (i + 1)); // 対象のカード2枚を、入れ替える(分割代入) [card[i], card[i_change]] = [card[i_change], card[i]] ; } console.log(card); |