cubing 0.29.1 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -6
- package/dist/esm/.DS_Store +0 -0
- package/dist/esm/alg/index.js +1 -2
- package/dist/esm/bluetooth/index.js +36 -32
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/{chunk-XRZBPKES.js → chunk-35OK6TQ4.js} +328 -66
- package/dist/esm/chunk-35OK6TQ4.js.map +7 -0
- package/dist/esm/{chunk-WYKXX2XY.js → chunk-4QZRHN6S.js} +10 -8
- package/dist/esm/{chunk-WYKXX2XY.js.map → chunk-4QZRHN6S.js.map} +2 -2
- package/dist/esm/{chunk-2JDBIQSV.js → chunk-5OQ34D3X.js} +7 -7
- package/dist/esm/{chunk-2JDBIQSV.js.map → chunk-5OQ34D3X.js.map} +2 -2
- package/dist/esm/{chunk-U2ONHTIX.js → chunk-6FB2XWAK.js} +33 -31
- package/dist/esm/chunk-6FB2XWAK.js.map +7 -0
- package/dist/esm/{chunk-ZNAYJGVL.js → chunk-C6KMV2PL.js} +2 -2
- package/dist/esm/{chunk-ZNAYJGVL.js.map → chunk-C6KMV2PL.js.map} +0 -0
- package/dist/esm/{chunk-XU5ILFX5.js → chunk-GQBRF4EM.js} +6 -4
- package/dist/esm/{chunk-XU5ILFX5.js.map → chunk-GQBRF4EM.js.map} +2 -2
- package/dist/esm/{chunk-WXCNEGW3.js → chunk-HR5D6SD4.js} +2 -2
- package/dist/esm/{chunk-WXCNEGW3.js.map → chunk-HR5D6SD4.js.map} +2 -2
- package/dist/esm/{chunk-XT3R2ENM.js → chunk-KOAJIBEX.js} +47 -38
- package/dist/esm/chunk-KOAJIBEX.js.map +7 -0
- package/dist/esm/{chunk-OX6O2ZO5.js → chunk-QHWK5RXN.js} +1 -1
- package/dist/esm/chunk-QHWK5RXN.js.map +7 -0
- package/dist/esm/{chunk-GW4FGG42.js → chunk-RI2DAEY6.js} +2 -2
- package/dist/esm/{chunk-GW4FGG42.js.map → chunk-RI2DAEY6.js.map} +0 -0
- package/dist/esm/{chunk-AHEXXC6V.js → chunk-VIUWS2PX.js} +4 -4
- package/dist/esm/chunk-VIUWS2PX.js.map +7 -0
- package/dist/esm/{chunk-2IZUSAXQ.js → chunk-WEYPAZEE.js} +1 -1
- package/dist/esm/{chunk-2IZUSAXQ.js.map → chunk-WEYPAZEE.js.map} +1 -1
- package/dist/esm/{chunk-NI7U4XAZ.js → chunk-ZQT3QSWD.js} +226 -113
- package/dist/esm/chunk-ZQT3QSWD.js.map +7 -0
- package/dist/esm/kpuzzle/index.js +2 -3
- package/dist/esm/notation/index.js +2 -3
- package/dist/esm/protocol/index.js +4 -5
- package/dist/esm/puzzle-geometry/index.js +110 -85
- package/dist/esm/puzzle-geometry/index.js.map +2 -2
- package/dist/esm/puzzles/index.js +10 -7
- package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js → puzzles-dynamic-3x3x3-ZKMODX2P.js} +1 -3
- package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js.map → puzzles-dynamic-3x3x3-ZKMODX2P.js.map} +1 -1
- package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js → puzzles-dynamic-4x4x4-DT42HVIY.js} +1 -3
- package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js.map → puzzles-dynamic-4x4x4-DT42HVIY.js.map} +1 -1
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js → puzzles-dynamic-side-events-HMUBMHA5.js} +2 -4
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js.map → puzzles-dynamic-side-events-HMUBMHA5.js.map} +2 -2
- package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js → puzzles-dynamic-unofficial-QXSDLTK5.js} +1 -3
- package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js.map → puzzles-dynamic-unofficial-QXSDLTK5.js.map} +1 -1
- package/dist/esm/scramble/index.js +3 -4
- package/dist/esm/search/index.js +8 -9
- package/dist/esm/{search-dynamic-sgs-side-events-4H3X5HLH.js → search-dynamic-sgs-side-events-XNTCWRI4.js} +6 -7
- package/dist/esm/search-dynamic-sgs-side-events-XNTCWRI4.js.map +7 -0
- package/dist/esm/{search-dynamic-sgs-unofficial-7IRW4LVD.js → search-dynamic-sgs-unofficial-5KMZ747E.js} +122 -68
- package/dist/esm/search-dynamic-sgs-unofficial-5KMZ747E.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-3x3x3-7XZTYQMO.js → search-dynamic-solve-3x3x3-TSXPWENP.js} +649 -407
- package/dist/esm/search-dynamic-solve-3x3x3-TSXPWENP.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-4x4x4-7JTJCCSY.js → search-dynamic-solve-4x4x4-FKQ2JWK2.js} +399 -151
- package/dist/esm/search-dynamic-solve-4x4x4-FKQ2JWK2.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-fto-4LI23P6K.js → search-dynamic-solve-fto-GPLW7S5F.js} +74 -35
- package/dist/esm/search-dynamic-solve-fto-GPLW7S5F.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-kilominx-3HEVQ4MC.js → search-dynamic-solve-kilominx-HB2QFUGF.js} +136 -72
- package/dist/esm/search-dynamic-solve-kilominx-HB2QFUGF.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-master_tetraminx-UB32C7MM.js → search-dynamic-solve-master_tetraminx-LR3LJI7O.js} +84 -42
- package/dist/esm/search-dynamic-solve-master_tetraminx-LR3LJI7O.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-sq1-HA72TYF2.js → search-dynamic-solve-sq1-W33UXTDZ.js} +129 -55
- package/dist/esm/search-dynamic-solve-sq1-W33UXTDZ.js.map +7 -0
- package/dist/esm/search-worker-inside-generated-string-5HKZNHKK.js +3884 -0
- package/dist/esm/search-worker-inside-generated-string-5HKZNHKK.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-T6YIT7YD.js → search-worker-js-entry-PDXEE46R.js} +44 -36
- package/dist/esm/search-worker-js-entry-PDXEE46R.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-OUEC4L5I.js → search-worker-ts-entry-UV2RY2EY.js} +3 -4
- package/dist/esm/{search-worker-ts-entry-OUEC4L5I.js.map → search-worker-ts-entry-UV2RY2EY.js.map} +1 -1
- package/dist/esm/stream/index.js +1 -2
- package/dist/esm/stream/index.js.map +2 -2
- package/dist/esm/twisty/index.js +368 -300
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{twisty-dynamic-3d-AZUSXQ5S.js → twisty-dynamic-3d-GPF6TW32.js} +57 -60
- package/dist/esm/twisty-dynamic-3d-GPF6TW32.js.map +7 -0
- package/dist/types/{Alg-137fb0d5.d.ts → Alg-1c8c3757.d.ts} +25 -26
- package/dist/types/{KState-a73111d7.d.ts → KState-7c9e40f4.d.ts} +1 -1
- package/dist/types/{TwizzleLink-bef52ecd.d.ts → TwizzleLink-3f8a01d2.d.ts} +19 -18
- package/dist/types/alg/index.d.ts +30 -8
- package/dist/types/bluetooth/index.d.ts +4 -4
- package/dist/types/{bluetooth-puzzle-8a678993.d.ts → bluetooth-puzzle-a64e9756.d.ts} +2 -2
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +1 -1
- package/dist/types/{outside-e55f28a0.d.ts → outside-b62aa614.d.ts} +2 -2
- package/dist/types/{parseAlg-a28f7568.d.ts → parseAlg-d5fbee87.d.ts} +1 -1
- package/dist/types/protocol/index.d.ts +2 -2
- package/dist/types/puzzle-geometry/index.d.ts +3 -3
- package/dist/types/puzzles/index.d.ts +8 -6
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +3 -3
- package/dist/types/twisty/index.d.ts +5 -5
- package/package.json +51 -147
- package/dist/esm/chunk-AHEXXC6V.js.map +0 -7
- package/dist/esm/chunk-NI7U4XAZ.js.map +0 -7
- package/dist/esm/chunk-OX6O2ZO5.js.map +0 -7
- package/dist/esm/chunk-SBZRVSPK.js +0 -30
- package/dist/esm/chunk-SBZRVSPK.js.map +0 -7
- package/dist/esm/chunk-U2ONHTIX.js.map +0 -7
- package/dist/esm/chunk-XRZBPKES.js.map +0 -7
- package/dist/esm/chunk-XT3R2ENM.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-side-events-4H3X5HLH.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-unofficial-7IRW4LVD.js.map +0 -7
- package/dist/esm/search-dynamic-solve-3x3x3-7XZTYQMO.js.map +0 -7
- package/dist/esm/search-dynamic-solve-4x4x4-7JTJCCSY.js.map +0 -7
- package/dist/esm/search-dynamic-solve-fto-4LI23P6K.js.map +0 -7
- package/dist/esm/search-dynamic-solve-kilominx-3HEVQ4MC.js.map +0 -7
- package/dist/esm/search-dynamic-solve-master_tetraminx-UB32C7MM.js.map +0 -7
- package/dist/esm/search-dynamic-solve-sq1-HA72TYF2.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-ZEY77HTF.js +0 -3886
- package/dist/esm/search-worker-inside-generated-string-ZEY77HTF.js.map +0 -7
- package/dist/esm/search-worker-js-entry-T6YIT7YD.js.map +0 -7
- package/dist/esm/twisty-dynamic-3d-AZUSXQ5S.js.map +0 -7
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__privateAdd,
|
|
3
|
-
__privateGet,
|
|
4
|
-
__privateMethod,
|
|
5
|
-
__privateSet
|
|
6
|
-
} from "./chunk-SBZRVSPK.js";
|
|
7
|
-
|
|
8
1
|
// src/cubing/alg/common.ts
|
|
9
2
|
var writeAlgDebugField = false;
|
|
10
3
|
var Comparable = class {
|
|
@@ -232,8 +225,7 @@ var LineComment = class extends AlgCommon {
|
|
|
232
225
|
// src/cubing/alg/alg-nodes/leaves/Newline.ts
|
|
233
226
|
var Newline = class extends AlgCommon {
|
|
234
227
|
toString() {
|
|
235
|
-
return
|
|
236
|
-
`;
|
|
228
|
+
return "\n";
|
|
237
229
|
}
|
|
238
230
|
isIdentical(other) {
|
|
239
231
|
return other.is(Newline);
|
|
@@ -249,7 +241,7 @@ var Newline = class extends AlgCommon {
|
|
|
249
241
|
// src/cubing/alg/alg-nodes/leaves/Pause.ts
|
|
250
242
|
var Pause = class extends AlgCommon {
|
|
251
243
|
toString() {
|
|
252
|
-
return
|
|
244
|
+
return ".";
|
|
253
245
|
}
|
|
254
246
|
isIdentical(other) {
|
|
255
247
|
return other.is(Pause);
|
|
@@ -431,20 +423,22 @@ var AlgParser = class {
|
|
|
431
423
|
const B = this.parseAlgWithStopping(["]"]);
|
|
432
424
|
this.mustConsumeNext("]");
|
|
433
425
|
switch (separator) {
|
|
434
|
-
case ":":
|
|
426
|
+
case ":": {
|
|
435
427
|
algBuilder.push(
|
|
436
428
|
addCharIndices(new Conjugate(A, B), savedCharIndex, this.#idx)
|
|
437
429
|
);
|
|
438
430
|
crowded = true;
|
|
439
431
|
algEndIdx = this.#idx;
|
|
440
432
|
continue mainLoop;
|
|
441
|
-
|
|
433
|
+
}
|
|
434
|
+
case ",": {
|
|
442
435
|
algBuilder.push(
|
|
443
436
|
addCharIndices(new Commutator(A, B), savedCharIndex, this.#idx)
|
|
444
437
|
);
|
|
445
438
|
crowded = true;
|
|
446
439
|
algEndIdx = this.#idx;
|
|
447
440
|
continue mainLoop;
|
|
441
|
+
}
|
|
448
442
|
default:
|
|
449
443
|
throw new Error("unexpected parsing error");
|
|
450
444
|
}
|
|
@@ -733,7 +727,7 @@ var QuantumMove = class extends Comparable {
|
|
|
733
727
|
if (this.#innerLayer !== null) {
|
|
734
728
|
s = String(this.#innerLayer) + s;
|
|
735
729
|
if (this.#outerLayer !== null) {
|
|
736
|
-
s = String(this.#outerLayer)
|
|
730
|
+
s = `${String(this.#outerLayer)}-${s}`;
|
|
737
731
|
}
|
|
738
732
|
}
|
|
739
733
|
return s;
|
|
@@ -929,7 +923,7 @@ function dispatch(t, algNode, dataDown) {
|
|
|
929
923
|
if (algNode.is(LineComment)) {
|
|
930
924
|
return t.traverseLineComment(algNode, dataDown);
|
|
931
925
|
}
|
|
932
|
-
throw new Error(
|
|
926
|
+
throw new Error("unknown AlgNode");
|
|
933
927
|
}
|
|
934
928
|
function mustBeAlgNode(t) {
|
|
935
929
|
if (t.is(Grouping) || t.is(Move) || t.is(Commutator) || t.is(Conjugate) || t.is(Pause) || t.is(Newline) || t.is(LineComment)) {
|
|
@@ -957,59 +951,184 @@ var TraversalUp = class extends TraversalDownUp {
|
|
|
957
951
|
return mustBeAlgNode(this.traverseAlgNode(algNode));
|
|
958
952
|
}
|
|
959
953
|
};
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
954
|
+
|
|
955
|
+
// src/cubing/alg/simplify/options.ts
|
|
956
|
+
var DEFAULT_DIRECTIONAL = "any-direction";
|
|
957
|
+
var DEFAULT_MOD_WRAP = "canonical-centered";
|
|
958
|
+
var AppendOptionsHelper = class {
|
|
959
|
+
constructor(config = {}) {
|
|
960
|
+
this.config = config;
|
|
961
|
+
}
|
|
962
|
+
cancelQuantum() {
|
|
963
|
+
const { cancel } = this.config;
|
|
964
|
+
if (cancel === true) {
|
|
965
|
+
return DEFAULT_DIRECTIONAL;
|
|
966
|
+
}
|
|
967
|
+
if (cancel === false) {
|
|
968
|
+
return "none";
|
|
969
|
+
}
|
|
970
|
+
return cancel?.directional ?? "none";
|
|
966
971
|
}
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
972
|
+
cancelAny() {
|
|
973
|
+
return this.config.cancel && this.cancelQuantum() !== "none";
|
|
974
|
+
}
|
|
975
|
+
cancelPuzzleSpecificModWrap() {
|
|
976
|
+
const { cancel } = this.config;
|
|
977
|
+
if (cancel === true || cancel === false) {
|
|
978
|
+
return DEFAULT_MOD_WRAP;
|
|
971
979
|
}
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
+
return cancel?.puzzleSpecificModWrap ?? DEFAULT_MOD_WRAP;
|
|
981
|
+
}
|
|
982
|
+
puzzleSpecificSimplifyOptions() {
|
|
983
|
+
return this.config.puzzleLoader?.puzzleSpecificSimplifyOptions ?? this.config.puzzleSpecificSimplifyOptions;
|
|
984
|
+
}
|
|
985
|
+
};
|
|
986
|
+
|
|
987
|
+
// src/cubing/alg/simplify/append.ts
|
|
988
|
+
function areSameDirection(direction, move2) {
|
|
989
|
+
return direction * Math.sign(move2.amount) >= 0;
|
|
990
|
+
}
|
|
991
|
+
function offsetMod(x, positiveMod, offset) {
|
|
992
|
+
return ((x - offset) % positiveMod + positiveMod) % positiveMod + offset;
|
|
993
|
+
}
|
|
994
|
+
function experimentalAppendMove(alg, addedMove, options) {
|
|
995
|
+
const optionsHelper = new AppendOptionsHelper(options);
|
|
996
|
+
let outputPrefix = Array.from(alg.childAlgNodes());
|
|
997
|
+
let outputSuffix = [addedMove];
|
|
998
|
+
function output() {
|
|
999
|
+
return new Alg([...outputPrefix, ...outputSuffix]);
|
|
1000
|
+
}
|
|
1001
|
+
function modMove(move) {
|
|
1002
|
+
if (optionsHelper.cancelPuzzleSpecificModWrap() === "none") {
|
|
1003
|
+
return move;
|
|
1004
|
+
}
|
|
1005
|
+
const quantumMoveOrder = optionsHelper.puzzleSpecificSimplifyOptions()?.quantumMoveOrder;
|
|
1006
|
+
if (!quantumMoveOrder) {
|
|
1007
|
+
return move;
|
|
1008
|
+
}
|
|
1009
|
+
const mod = quantumMoveOrder(addedMove.quantum);
|
|
1010
|
+
let offset;
|
|
1011
|
+
switch (optionsHelper.cancelPuzzleSpecificModWrap()) {
|
|
1012
|
+
case "gravity": {
|
|
1013
|
+
offset = -Math.floor((mod - (move.amount < 0 ? 0 : 1)) / 2);
|
|
1014
|
+
break;
|
|
1015
|
+
}
|
|
1016
|
+
case "canonical-centered": {
|
|
1017
|
+
offset = -Math.floor((mod - 1) / 2);
|
|
1018
|
+
break;
|
|
1019
|
+
}
|
|
1020
|
+
case "canonical-positive": {
|
|
1021
|
+
offset = 0;
|
|
1022
|
+
break;
|
|
1023
|
+
}
|
|
1024
|
+
case "preserve-sign": {
|
|
1025
|
+
offset = move.amount < 0 ? 1 - mod : 0;
|
|
1026
|
+
break;
|
|
1027
|
+
}
|
|
1028
|
+
default: {
|
|
1029
|
+
throw new Error("Unknown mod wrap");
|
|
980
1030
|
}
|
|
981
|
-
const newMove = new Move(move.quantum, newAmount);
|
|
982
|
-
newAlgNodes.push(newMove);
|
|
983
|
-
lastAlgNode = newMove;
|
|
984
|
-
return true;
|
|
985
1031
|
}
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1032
|
+
let offsetAmount = offsetMod(move.amount, mod, offset);
|
|
1033
|
+
return move.modified({ amount: offsetAmount });
|
|
1034
|
+
}
|
|
1035
|
+
if (optionsHelper.cancelAny()) {
|
|
1036
|
+
let canCancelMoveBasedOnQuantum;
|
|
1037
|
+
const axis = optionsHelper.puzzleSpecificSimplifyOptions()?.axis;
|
|
1038
|
+
if (axis) {
|
|
1039
|
+
canCancelMoveBasedOnQuantum = (move) => axis.areQuantumMovesSameAxis(addedMove.quantum, move.quantum);
|
|
1040
|
+
} else {
|
|
1041
|
+
const newMoveQuantumString = addedMove.quantum.toString();
|
|
1042
|
+
canCancelMoveBasedOnQuantum = (move) => move.quantum.toString() === newMoveQuantumString;
|
|
1043
|
+
}
|
|
1044
|
+
const sameDirectionOnly = optionsHelper.cancelQuantum() === "same-direction";
|
|
1045
|
+
const quantumDirections = /* @__PURE__ */ new Map();
|
|
1046
|
+
quantumDirections.set(
|
|
1047
|
+
addedMove.quantum.toString(),
|
|
1048
|
+
Math.sign(addedMove.amount)
|
|
1049
|
+
);
|
|
1050
|
+
let i;
|
|
1051
|
+
for (i = outputPrefix.length - 1; i >= 0; i--) {
|
|
1052
|
+
const move = outputPrefix[i].as(Move);
|
|
1053
|
+
if (!move) {
|
|
1054
|
+
break;
|
|
1055
|
+
}
|
|
1056
|
+
if (!canCancelMoveBasedOnQuantum(move)) {
|
|
1057
|
+
break;
|
|
1058
|
+
}
|
|
1059
|
+
const quantumKey = move.quantum.toString();
|
|
1060
|
+
if (sameDirectionOnly) {
|
|
1061
|
+
const existingQuantumDirectionOnAxis = quantumDirections.get(quantumKey);
|
|
1062
|
+
if (existingQuantumDirectionOnAxis && !areSameDirection(existingQuantumDirectionOnAxis, move)) {
|
|
1063
|
+
break;
|
|
1001
1064
|
}
|
|
1065
|
+
quantumDirections.set(quantumKey, Math.sign(move.amount));
|
|
1002
1066
|
}
|
|
1003
1067
|
}
|
|
1004
|
-
const
|
|
1068
|
+
const suffix = [...outputPrefix.splice(i + 1), addedMove];
|
|
1069
|
+
if (axis) {
|
|
1070
|
+
outputSuffix = axis.simplifySameAxisMoves(
|
|
1071
|
+
suffix,
|
|
1072
|
+
optionsHelper.cancelPuzzleSpecificModWrap() !== "none"
|
|
1073
|
+
);
|
|
1074
|
+
} else {
|
|
1075
|
+
let amount = suffix.reduce(
|
|
1076
|
+
(sum, move) => sum + move.amount,
|
|
1077
|
+
0
|
|
1078
|
+
);
|
|
1079
|
+
if (quantumDirections.size !== 1) {
|
|
1080
|
+
throw new Error(
|
|
1081
|
+
"Internal error: multiple quantums when one was expected"
|
|
1082
|
+
);
|
|
1083
|
+
}
|
|
1084
|
+
outputSuffix = [new Move(addedMove.quantum, amount)];
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
outputSuffix = outputSuffix.map((m) => modMove(m)).filter(
|
|
1088
|
+
(move) => move.amount !== 0
|
|
1089
|
+
);
|
|
1090
|
+
return output();
|
|
1091
|
+
}
|
|
1092
|
+
function experimentalAppendNode(alg, leaf, options) {
|
|
1093
|
+
const maybeMove = leaf.as(Move);
|
|
1094
|
+
if (maybeMove) {
|
|
1095
|
+
return experimentalAppendMove(alg, maybeMove, options);
|
|
1096
|
+
} else {
|
|
1097
|
+
return new Alg([...alg.childAlgNodes(), leaf]);
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
// src/cubing/alg/simplify/simplify.ts
|
|
1102
|
+
var Simplify = class extends TraversalDownUp {
|
|
1103
|
+
#newPlaceholderAssociationsMap;
|
|
1104
|
+
#newPlaceholderAssociations() {
|
|
1105
|
+
return this.#newPlaceholderAssociationsMap ?? (this.#newPlaceholderAssociationsMap = /* @__PURE__ */ new Map());
|
|
1106
|
+
}
|
|
1107
|
+
#descendOptions(options) {
|
|
1108
|
+
return {
|
|
1109
|
+
...options,
|
|
1005
1110
|
depth: options.depth ? options.depth - 1 : null
|
|
1006
1111
|
};
|
|
1112
|
+
}
|
|
1113
|
+
*traverseAlg(alg, options) {
|
|
1114
|
+
if (options.depth === 0) {
|
|
1115
|
+
yield* alg.childAlgNodes();
|
|
1116
|
+
return;
|
|
1117
|
+
}
|
|
1118
|
+
let output = [];
|
|
1119
|
+
const newOptions = this.#descendOptions(options);
|
|
1007
1120
|
for (const algNode of alg.childAlgNodes()) {
|
|
1008
|
-
for (const
|
|
1009
|
-
|
|
1121
|
+
for (const traversedNode of this.traverseAlgNode(algNode, newOptions)) {
|
|
1122
|
+
output = Array.from(
|
|
1123
|
+
experimentalAppendNode(
|
|
1124
|
+
new Alg(output),
|
|
1125
|
+
traversedNode,
|
|
1126
|
+
newOptions
|
|
1127
|
+
).childAlgNodes()
|
|
1128
|
+
);
|
|
1010
1129
|
}
|
|
1011
1130
|
}
|
|
1012
|
-
for (const newAlgNode of
|
|
1131
|
+
for (const newAlgNode of output) {
|
|
1013
1132
|
yield newAlgNode;
|
|
1014
1133
|
}
|
|
1015
1134
|
}
|
|
@@ -1018,14 +1137,17 @@ var _Simplify = class extends TraversalDownUp {
|
|
|
1018
1137
|
yield grouping;
|
|
1019
1138
|
return;
|
|
1020
1139
|
}
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
}
|
|
1140
|
+
if (grouping.amount === 0) {
|
|
1141
|
+
return;
|
|
1142
|
+
}
|
|
1024
1143
|
const newGrouping = new Grouping(
|
|
1025
|
-
this.traverseAlg(grouping.alg,
|
|
1144
|
+
this.traverseAlg(grouping.alg, this.#descendOptions(options)),
|
|
1026
1145
|
grouping.amount
|
|
1027
1146
|
);
|
|
1028
|
-
|
|
1147
|
+
if (newGrouping.alg.experimentalIsEmpty()) {
|
|
1148
|
+
return;
|
|
1149
|
+
}
|
|
1150
|
+
const newPlaceholder = this.#newPlaceholderAssociations().get(grouping);
|
|
1029
1151
|
if (newPlaceholder) {
|
|
1030
1152
|
newGrouping.experimentalNISSPlaceholder = newPlaceholder;
|
|
1031
1153
|
newPlaceholder.experimentalNISSGrouping = newGrouping;
|
|
@@ -1035,36 +1157,64 @@ var _Simplify = class extends TraversalDownUp {
|
|
|
1035
1157
|
*traverseMove(move, _options) {
|
|
1036
1158
|
yield move;
|
|
1037
1159
|
}
|
|
1160
|
+
#doChildrenCommute(A, B, options) {
|
|
1161
|
+
if (A.experimentalNumChildAlgNodes() === 1 && B.experimentalNumChildAlgNodes() === 1) {
|
|
1162
|
+
const aMove = Array.from(A.childAlgNodes())[0]?.as(Move);
|
|
1163
|
+
const bMove = Array.from(B.childAlgNodes())[0]?.as(Move);
|
|
1164
|
+
if (!(aMove && bMove)) {
|
|
1165
|
+
return false;
|
|
1166
|
+
}
|
|
1167
|
+
if (bMove.quantum.isIdentical(aMove.quantum)) {
|
|
1168
|
+
return true;
|
|
1169
|
+
}
|
|
1170
|
+
const appendOptionsHelper = new AppendOptionsHelper(options);
|
|
1171
|
+
if (appendOptionsHelper.puzzleSpecificSimplifyOptions()?.axis?.areQuantumMovesSameAxis(
|
|
1172
|
+
aMove.quantum,
|
|
1173
|
+
bMove.quantum
|
|
1174
|
+
)) {
|
|
1175
|
+
return true;
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
return false;
|
|
1179
|
+
}
|
|
1038
1180
|
*traverseCommutator(commutator, options) {
|
|
1039
1181
|
if (options.depth === 0) {
|
|
1040
1182
|
yield commutator;
|
|
1041
1183
|
return;
|
|
1042
1184
|
}
|
|
1043
|
-
const newOptions =
|
|
1044
|
-
|
|
1045
|
-
};
|
|
1046
|
-
yield new Commutator(
|
|
1185
|
+
const newOptions = this.#descendOptions(options);
|
|
1186
|
+
const newCommutator = new Commutator(
|
|
1047
1187
|
this.traverseAlg(commutator.A, newOptions),
|
|
1048
1188
|
this.traverseAlg(commutator.B, newOptions)
|
|
1049
1189
|
);
|
|
1190
|
+
if (newCommutator.A.experimentalIsEmpty() || newCommutator.B.experimentalIsEmpty() || newCommutator.A.isIdentical(newCommutator.B) || newCommutator.A.isIdentical(newCommutator.B.invert()) || this.#doChildrenCommute(newCommutator.A, newCommutator.B, options)) {
|
|
1191
|
+
return;
|
|
1192
|
+
}
|
|
1193
|
+
yield newCommutator;
|
|
1050
1194
|
}
|
|
1051
1195
|
*traverseConjugate(conjugate, options) {
|
|
1052
1196
|
if (options.depth === 0) {
|
|
1053
1197
|
yield conjugate;
|
|
1054
1198
|
return;
|
|
1055
1199
|
}
|
|
1056
|
-
const newOptions =
|
|
1057
|
-
|
|
1058
|
-
};
|
|
1059
|
-
yield new Conjugate(
|
|
1200
|
+
const newOptions = this.#descendOptions(options);
|
|
1201
|
+
const newConjugate = new Conjugate(
|
|
1060
1202
|
this.traverseAlg(conjugate.A, newOptions),
|
|
1061
1203
|
this.traverseAlg(conjugate.B, newOptions)
|
|
1062
1204
|
);
|
|
1205
|
+
if (newConjugate.B.experimentalIsEmpty()) {
|
|
1206
|
+
return;
|
|
1207
|
+
}
|
|
1208
|
+
if (newConjugate.A.experimentalIsEmpty() || newConjugate.A.isIdentical(newConjugate.B) || newConjugate.A.isIdentical(newConjugate.B.invert()) || this.#doChildrenCommute(newConjugate.A, newConjugate.B, options)) {
|
|
1209
|
+
yield* conjugate.B.childAlgNodes();
|
|
1210
|
+
return;
|
|
1211
|
+
}
|
|
1212
|
+
yield newConjugate;
|
|
1063
1213
|
}
|
|
1064
1214
|
*traversePause(pause, _options) {
|
|
1065
1215
|
if (pause.experimentalNISSGrouping) {
|
|
1066
1216
|
const newPause = new Pause();
|
|
1067
|
-
|
|
1217
|
+
this.#newPlaceholderAssociations().set(
|
|
1068
1218
|
pause.experimentalNISSGrouping,
|
|
1069
1219
|
newPause
|
|
1070
1220
|
);
|
|
@@ -1080,23 +1230,6 @@ var _Simplify = class extends TraversalDownUp {
|
|
|
1080
1230
|
yield comment;
|
|
1081
1231
|
}
|
|
1082
1232
|
};
|
|
1083
|
-
var Simplify = _Simplify;
|
|
1084
|
-
_newPlaceholderAssociationsMap = new WeakMap();
|
|
1085
|
-
_newPlaceholderAssociations = new WeakSet();
|
|
1086
|
-
newPlaceholderAssociations_fn = function() {
|
|
1087
|
-
return __privateGet(this, _newPlaceholderAssociationsMap) ?? __privateSet(this, _newPlaceholderAssociationsMap, /* @__PURE__ */ new Map());
|
|
1088
|
-
};
|
|
1089
|
-
_newAmount = new WeakSet();
|
|
1090
|
-
newAmount_fn = function(move, deltaAmount, options) {
|
|
1091
|
-
let newAmount = move.amount + deltaAmount;
|
|
1092
|
-
if (options?.quantumMoveOrder) {
|
|
1093
|
-
const order = options.quantumMoveOrder(move.quantum);
|
|
1094
|
-
const min = Math.floor(order / 2) + 1 - order;
|
|
1095
|
-
newAmount = (newAmount % order + order - min) % order + min;
|
|
1096
|
-
}
|
|
1097
|
-
return newAmount;
|
|
1098
|
-
};
|
|
1099
|
-
__privateAdd(Simplify, _newAmount);
|
|
1100
1233
|
var simplifyInstance = new Simplify();
|
|
1101
1234
|
var simplify = simplifyInstance.traverseAlg.bind(simplifyInstance);
|
|
1102
1235
|
|
|
@@ -1228,9 +1361,12 @@ var Alg = class extends AlgCommon {
|
|
|
1228
1361
|
}
|
|
1229
1362
|
return output;
|
|
1230
1363
|
}
|
|
1231
|
-
|
|
1364
|
+
experimentalSimplify(options) {
|
|
1232
1365
|
return new Alg(simplify(this, options ?? {}));
|
|
1233
1366
|
}
|
|
1367
|
+
simplify(options) {
|
|
1368
|
+
return this.experimentalSimplify(options);
|
|
1369
|
+
}
|
|
1234
1370
|
};
|
|
1235
1371
|
function spaceBetween(u1, u2) {
|
|
1236
1372
|
if (u1.is(Newline) || u2.is(Newline)) {
|
|
@@ -1490,29 +1626,6 @@ function experimentalAlgCubingNetLink(options) {
|
|
|
1490
1626
|
return url.toString();
|
|
1491
1627
|
}
|
|
1492
1628
|
|
|
1493
|
-
// src/cubing/alg/operation.ts
|
|
1494
|
-
function experimentalAppendMove(alg, newMove, options) {
|
|
1495
|
-
const oldAlgNodes = Array.from(alg.childAlgNodes());
|
|
1496
|
-
const oldLastMove = oldAlgNodes[oldAlgNodes.length - 1];
|
|
1497
|
-
if (options?.coalesce && oldLastMove && oldLastMove.quantum && oldLastMove.quantum.isIdentical(newMove.quantum)) {
|
|
1498
|
-
const newAlgNodes = oldAlgNodes.slice(0, oldAlgNodes.length - 1);
|
|
1499
|
-
let newAmount = oldLastMove.amount + newMove.amount;
|
|
1500
|
-
const mod = options?.mod;
|
|
1501
|
-
if (mod) {
|
|
1502
|
-
newAmount = (newAmount % mod + mod) % mod;
|
|
1503
|
-
if (newAmount * 2 > mod) {
|
|
1504
|
-
newAmount -= mod;
|
|
1505
|
-
}
|
|
1506
|
-
}
|
|
1507
|
-
if (newAmount !== 0) {
|
|
1508
|
-
newAlgNodes.push(oldLastMove.modified({ amount: newAmount }));
|
|
1509
|
-
}
|
|
1510
|
-
return new Alg(newAlgNodes);
|
|
1511
|
-
} else {
|
|
1512
|
-
return new Alg([...oldAlgNodes, newMove]);
|
|
1513
|
-
}
|
|
1514
|
-
}
|
|
1515
|
-
|
|
1516
1629
|
export {
|
|
1517
1630
|
direct,
|
|
1518
1631
|
directedGenerator,
|
|
@@ -1529,10 +1642,10 @@ export {
|
|
|
1529
1642
|
experimentalIs,
|
|
1530
1643
|
TraversalDownUp,
|
|
1531
1644
|
TraversalUp,
|
|
1645
|
+
experimentalAppendMove,
|
|
1532
1646
|
Alg,
|
|
1533
1647
|
Example,
|
|
1534
1648
|
keyToMove,
|
|
1535
|
-
experimentalAlgCubingNetLink
|
|
1536
|
-
experimentalAppendMove
|
|
1649
|
+
experimentalAlgCubingNetLink
|
|
1537
1650
|
};
|
|
1538
|
-
//# sourceMappingURL=chunk-
|
|
1651
|
+
//# sourceMappingURL=chunk-ZQT3QSWD.js.map
|