Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 6x 6x 6x 6x 6x 6x 6x 6x 2x 2x 2x | import { random } from "./random";
// Fisher–Yates algorithm
export const shuffle = <Element>(array: Element[]): Element[] => {
const sorted = array;
let currentIndex: number = array.length;
let randomIndex: number;
// While there remain elements to shuffle...
// eslint-disable-next-line no-loops/no-loops
while (currentIndex !== 0) {
// Pick a remaining element...
randomIndex = random(0, currentIndex);
currentIndex -= 1;
// And swap it with the current element.
// eslint-disable-next-line security/detect-object-injection
[sorted[currentIndex], sorted[randomIndex]] = [sorted[randomIndex], sorted[currentIndex]];
}
return sorted;
};
|