mirror of
https://ghproxy.com/https://github.com/StreakingMan/solvable-sheep-game
synced 2025-05-24 04:28:14 +08:00
feat: 优化洗牌算法为O(n)的洗牌算法
This commit is contained in:
parent
b3b5737e5c
commit
8b3960e976
12
src/App.tsx
12
src/App.tsx
|
@ -83,9 +83,19 @@ const makeScene: (level: number, icons: Icon[]) => Scene = (level, icons) => {
|
|||
return scene;
|
||||
};
|
||||
|
||||
// o(n) 时间复杂度的洗牌算法
|
||||
const fastShuffle: <T = any>(arr: T[]) => T[] = (arr) => {
|
||||
const res = arr.slice();
|
||||
for (let i = 0; i < res.length; i++) {
|
||||
const idx = (Math.random() * res.length) >> 0;
|
||||
[res[i], res[idx]] = [res[idx], res[i]];
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
// 洗牌
|
||||
const washScene: (level: number, scene: Scene) => Scene = (level, scene) => {
|
||||
const updateScene = scene.slice().sort(() => Math.random() - 0.5);
|
||||
const updateScene = fastShuffle(scene);
|
||||
const offsetPool = [0, 25, -25, 50, -50].slice(0, 1 + level);
|
||||
const range = [
|
||||
[2, 6],
|
||||
|
|
Loading…
Reference in New Issue
Block a user