diff --git a/script/shuffle.ts b/script/shuffle.ts
index 40e32c2..1ec208f 100644
--- a/script/shuffle.ts
+++ b/script/shuffle.ts
@@ -1,3 +1,18 @@
+function shuffle(subject: A[]): A[] {
+ let res = Array.from(subject);
+
+ for (let i = 0; i < res.length - 1; ++i) {
+ const j = i + Math.floor(Math.random() * (res.length - i));
+ if (i != j) {
+ const k = res[i]!;
+ res[i] = res[j]!;
+ res[j] = k;
+ }
+ }
+
+ return res;
+}
+
function group(subject: A[], keepTogether: A[][]): A[][] {
type Value = {array: A[], added: boolean};
@@ -14,7 +29,7 @@ function group(subject: A[], keepTogether: A[][]): A[][] {
if (group?.added) { continue; }
else if (group) {
group.added = true;
- res.push(group.array);
+ res.push(shuffle(group.array));
} else {
res.push([x]);
}
@@ -23,24 +38,8 @@ function group(subject: A[], keepTogether: A[][]): A[][] {
return res;
}
-function shuffle(subject: A[]): A[] {
- let res = Array.from(subject);
-
- for (let i = 0; i < res.length - 2; ++i) {
- const j = i + Math.floor(Math.random() * (res.length - i));
- if (i != j) {
- const k = res[i]!;
- res[i] = res[j]!;
- res[j] = k;
- }
- }
-
- return res;
-}
-
function groupedShuffle(subject: A[], keepTogether: A[][]): A[] {
- let groups = group(subject, keepTogether);
- return shuffle(groups).flat();
+ return shuffle(group(subject, keepTogether)).flat();
}
function shuffleAll() {