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,8 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Move,
|
|
3
3
|
QuantumMove
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-SBZRVSPK.js";
|
|
4
|
+
} from "../chunk-ZQT3QSWD.js";
|
|
6
5
|
|
|
7
6
|
// src/cubing/puzzle-geometry/FaceNameSwizzler.ts
|
|
8
7
|
var FaceNameSwizzler = class {
|
|
@@ -41,7 +40,7 @@ var FaceNameSwizzler = class {
|
|
|
41
40
|
r.push(currentMatch);
|
|
42
41
|
at += this.facenames[currentMatch].length;
|
|
43
42
|
} else {
|
|
44
|
-
throw new Error(
|
|
43
|
+
throw new Error(`Could not split ${s} into face names.`);
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
return r;
|
|
@@ -267,7 +266,7 @@ var NxNxNCubeMapper = class {
|
|
|
267
266
|
}
|
|
268
267
|
notationToInternal(move) {
|
|
269
268
|
const grip = move.family;
|
|
270
|
-
if (!move.innerLayer
|
|
269
|
+
if (!(move.innerLayer || move.outerLayer)) {
|
|
271
270
|
if (grip === "x") {
|
|
272
271
|
move = new Move("Rv", move.amount);
|
|
273
272
|
} else if (grip === "y") {
|
|
@@ -316,7 +315,7 @@ var NxNxNCubeMapper = class {
|
|
|
316
315
|
}
|
|
317
316
|
notationToExternal(move) {
|
|
318
317
|
const grip = move.family;
|
|
319
|
-
if (!move.innerLayer
|
|
318
|
+
if (!(move.innerLayer || move.outerLayer)) {
|
|
320
319
|
if (grip === "Rv") {
|
|
321
320
|
return new Move("x", move.amount);
|
|
322
321
|
} else if (grip === "Uv") {
|
|
@@ -575,7 +574,7 @@ function parseOptions(argv) {
|
|
|
575
574
|
options.puzzleOrientation = JSON.parse(argv[argp]);
|
|
576
575
|
argp++;
|
|
577
576
|
} else {
|
|
578
|
-
throw new Error(
|
|
577
|
+
throw new Error(`Bad option: ${option}`);
|
|
579
578
|
}
|
|
580
579
|
}
|
|
581
580
|
const puzzleDescription = parsePuzzleDescription(argv.slice(argp).join(" "));
|
|
@@ -662,7 +661,7 @@ var Perm = class {
|
|
|
662
661
|
this.p = a;
|
|
663
662
|
}
|
|
664
663
|
toString() {
|
|
665
|
-
return
|
|
664
|
+
return `Perm[${this.p.join(" ")}]`;
|
|
666
665
|
}
|
|
667
666
|
mul(p2) {
|
|
668
667
|
const c = Array(this.n);
|
|
@@ -705,7 +704,7 @@ var Perm = class {
|
|
|
705
704
|
incyc.push(1 + j);
|
|
706
705
|
seen[j] = true;
|
|
707
706
|
}
|
|
708
|
-
cyc.push(
|
|
707
|
+
cyc.push(`(${incyc.join(",")})`);
|
|
709
708
|
}
|
|
710
709
|
return cyc.join("");
|
|
711
710
|
}
|
|
@@ -789,18 +788,18 @@ var PGOrbitsDef = class {
|
|
|
789
788
|
}
|
|
790
789
|
const pd = this.moveops[i].orbits[s];
|
|
791
790
|
for (let j = 0; j < n; j++) {
|
|
792
|
-
if (pd.perm[j]
|
|
791
|
+
if (pd.perm[j] !== j || pd.ori[j] !== 0) {
|
|
793
792
|
m[j].push(mvname);
|
|
794
793
|
}
|
|
795
794
|
}
|
|
796
795
|
}
|
|
797
796
|
for (let j = 0; j < n; j++) {
|
|
798
|
-
r.push(
|
|
797
|
+
r.push(`# ${j + 1} ${m[j].join(" ")}`);
|
|
799
798
|
}
|
|
800
799
|
}
|
|
801
800
|
toKsolve(name, mapper = new NullMapper()) {
|
|
802
801
|
const result = [];
|
|
803
|
-
result.push(
|
|
802
|
+
result.push(`Name ${name}`);
|
|
804
803
|
result.push("");
|
|
805
804
|
for (let i = 0; i < this.orbitnames.length; i++) {
|
|
806
805
|
result.push(
|
|
@@ -830,10 +829,14 @@ var PGOrbitsDef = class {
|
|
|
830
829
|
doinv = true;
|
|
831
830
|
name2 = name2.substring(0, name2.length - 1);
|
|
832
831
|
}
|
|
833
|
-
result.push(
|
|
832
|
+
result.push(`Move ${name2}`);
|
|
834
833
|
for (let j = 0; j < this.orbitnames.length; j++) {
|
|
835
834
|
if (doinv) {
|
|
836
|
-
this.moveops[i].orbits[j].inv().appendDefinition(
|
|
835
|
+
this.moveops[i].orbits[j].inv().appendDefinition(
|
|
836
|
+
result,
|
|
837
|
+
this.orbitnames[j],
|
|
838
|
+
true
|
|
839
|
+
);
|
|
837
840
|
} else {
|
|
838
841
|
this.moveops[i].orbits[j].appendDefinition(
|
|
839
842
|
result,
|
|
@@ -1422,47 +1425,47 @@ var PGPuzzles = {
|
|
|
1422
1425
|
"20x20x20": "c f 0 f .1 f .2 f .3 f .4 f .5 f .6 f .7 f .8 f .9",
|
|
1423
1426
|
"30x30x30": "c f 0 f .066667 f .133333 f .2 f .266667 f .333333 f .4 f .466667 f .533333 f .6 f .666667 f .733333 f .8 f .866667 f .933333",
|
|
1424
1427
|
"40x40x40": "c f 0 f .05 f .1 f .15 f .2 f .25 f .3 f .35 f .4 f .45 f .5 f .55 f .6 f .65 f .7 f .75 f .8 f .85 f .9 f .95",
|
|
1425
|
-
|
|
1428
|
+
skewb: "c v 0",
|
|
1426
1429
|
"master skewb": "c v 0.275",
|
|
1427
1430
|
"professor skewb": "c v 0 v 0.38",
|
|
1428
1431
|
"compy cube": "c v 0.915641442663986",
|
|
1429
|
-
|
|
1432
|
+
helicopter: "c e 0.707106781186547",
|
|
1430
1433
|
"curvy copter": "c e 0.83",
|
|
1431
|
-
|
|
1434
|
+
dino: "c v 0.577350269189626",
|
|
1432
1435
|
"little chop": "c e 0",
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1436
|
+
pyramorphix: "t e 0",
|
|
1437
|
+
mastermorphix: "t e 0.346184634065199",
|
|
1438
|
+
pyraminx: "t v 0.333333333333333 v 1.66666666666667",
|
|
1439
|
+
tetraminx: "t v 0.333333333333333",
|
|
1437
1440
|
"master pyraminx": "t v 0 v 1 v 2",
|
|
1438
1441
|
"master tetraminx": "t v 0 v 1",
|
|
1439
1442
|
"professor pyraminx": "t v -0.2 v 0.6 v 1.4 v 2.2",
|
|
1440
1443
|
"professor tetraminx": "t v -0.2 v 0.6 v 1.4",
|
|
1441
1444
|
"Jing pyraminx": "t f 0",
|
|
1442
1445
|
"master pyramorphix": "t e 0.866025403784437",
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1446
|
+
megaminx: "d f 0.7",
|
|
1447
|
+
gigaminx: "d f 0.64 f 0.82",
|
|
1448
|
+
teraminx: "d f 0.64 f 0.76 f 0.88",
|
|
1449
|
+
petaminx: "d f 0.64 f 0.73 f 0.82 f 0.91",
|
|
1450
|
+
examinx: "d f 0.64 f 0.712 f 0.784 f 0.856 f 0.928",
|
|
1451
|
+
zetaminx: "d f 0.64 f 0.7 f 0.76 f 0.82 f 0.88 f 0.94",
|
|
1452
|
+
yottaminx: "d f 0.64 f 0.6914 f 0.7429 f 0.7943 f 0.8457 f 0.8971 f 0.9486",
|
|
1453
|
+
pentultimate: "d f 0",
|
|
1451
1454
|
"master pentultimate": "d f 0.1",
|
|
1452
1455
|
"elite pentultimate": "d f 0 f 0.145905",
|
|
1453
|
-
|
|
1456
|
+
starminx: "d v 0.937962370425399",
|
|
1454
1457
|
"starminx 2": "d f 0.23606797749979",
|
|
1455
1458
|
"pyraminx crystal": "d f 0.447213595499989",
|
|
1456
|
-
|
|
1459
|
+
chopasaurus: "d v 0",
|
|
1457
1460
|
"big chop": "d e 0",
|
|
1458
1461
|
"skewb diamond": "o f 0",
|
|
1459
|
-
|
|
1462
|
+
FTO: "o f 0.333333333333333",
|
|
1460
1463
|
"master FTO": "o f 0.5 f 0",
|
|
1461
1464
|
"Christopher's jewel": "o v 0.577350269189626",
|
|
1462
|
-
|
|
1465
|
+
octastar: "o e 0",
|
|
1463
1466
|
"Trajber's octahedron": "o v 0.433012701892219",
|
|
1464
1467
|
"radio chop": "i f 0",
|
|
1465
|
-
|
|
1468
|
+
icosamate: "i v 0",
|
|
1466
1469
|
"icosahedron 2": "i v 0.18759247376021",
|
|
1467
1470
|
"icosahedron 3": "i v 0.18759247376021 e 0",
|
|
1468
1471
|
"icosahedron static faces": "i v 0.84",
|
|
@@ -2399,7 +2402,7 @@ function getmovename(geo, bits, slices) {
|
|
|
2399
2402
|
let movenameFamily = geo[0];
|
|
2400
2403
|
let movenamePrefix = "";
|
|
2401
2404
|
if (bits[0] === 0 && bits[1] === slices) {
|
|
2402
|
-
movenameFamily = movenameFamily
|
|
2405
|
+
movenameFamily = `${movenameFamily}v`;
|
|
2403
2406
|
} else if (bits[0] === bits[1]) {
|
|
2404
2407
|
if (bits[1] > 0) {
|
|
2405
2408
|
movenamePrefix = String(bits[1] + 1);
|
|
@@ -2433,7 +2436,7 @@ function splitByFaceNames(s, facenames) {
|
|
|
2433
2436
|
r.push(currentMatch);
|
|
2434
2437
|
at += currentMatch.length;
|
|
2435
2438
|
} else {
|
|
2436
|
-
throw new Error(
|
|
2439
|
+
throw new Error(`Could not split ${s} into face names.`);
|
|
2437
2440
|
}
|
|
2438
2441
|
}
|
|
2439
2442
|
return r;
|
|
@@ -2480,27 +2483,32 @@ var PuzzleGeometry = class {
|
|
|
2480
2483
|
this.cubies = [];
|
|
2481
2484
|
let g = null;
|
|
2482
2485
|
switch (shape) {
|
|
2483
|
-
case "c":
|
|
2486
|
+
case "c": {
|
|
2484
2487
|
g = cube();
|
|
2485
2488
|
break;
|
|
2486
|
-
|
|
2489
|
+
}
|
|
2490
|
+
case "o": {
|
|
2487
2491
|
g = octahedron();
|
|
2488
2492
|
break;
|
|
2489
|
-
|
|
2493
|
+
}
|
|
2494
|
+
case "i": {
|
|
2490
2495
|
g = icosahedron();
|
|
2491
2496
|
break;
|
|
2492
|
-
|
|
2497
|
+
}
|
|
2498
|
+
case "t": {
|
|
2493
2499
|
g = tetrahedron();
|
|
2494
2500
|
break;
|
|
2495
|
-
|
|
2501
|
+
}
|
|
2502
|
+
case "d": {
|
|
2496
2503
|
g = dodecahedron();
|
|
2497
2504
|
break;
|
|
2505
|
+
}
|
|
2498
2506
|
default:
|
|
2499
|
-
throw new Error(
|
|
2507
|
+
throw new Error(`Bad shape argument: ${shape}`);
|
|
2500
2508
|
}
|
|
2501
2509
|
this.rotations = closure(g);
|
|
2502
2510
|
if (this.options.verbosity) {
|
|
2503
|
-
console.log(
|
|
2511
|
+
console.log(`# Rotations: ${this.rotations.length}`);
|
|
2504
2512
|
}
|
|
2505
2513
|
const baseplane = g[0];
|
|
2506
2514
|
this.baseplanerot = uniqueplanes(baseplane, this.rotations);
|
|
@@ -2511,19 +2519,19 @@ var PuzzleGeometry = class {
|
|
|
2511
2519
|
this.net = net;
|
|
2512
2520
|
this.colors = defaultcolors()[baseplanes.length];
|
|
2513
2521
|
if (this.options.verbosity > 0) {
|
|
2514
|
-
console.log(
|
|
2522
|
+
console.log(`# Base planes: ${baseplanes.length}`);
|
|
2515
2523
|
}
|
|
2516
2524
|
const baseface = getface(baseplanes);
|
|
2517
2525
|
const zero = new Quat(0, 0, 0, 0);
|
|
2518
2526
|
if (this.options.verbosity > 0) {
|
|
2519
|
-
console.log(
|
|
2527
|
+
console.log(`# Face vertices: ${baseface.length}`);
|
|
2520
2528
|
}
|
|
2521
2529
|
const facenormal = baseplanes[0].makenormal();
|
|
2522
2530
|
const edgenormal = baseface[0].sum(baseface[1]).makenormal();
|
|
2523
2531
|
const vertexnormal = baseface[0].makenormal();
|
|
2524
2532
|
const boundary = new Quat(1, facenormal.b, facenormal.c, facenormal.d);
|
|
2525
2533
|
if (this.options.verbosity > 0) {
|
|
2526
|
-
console.log(
|
|
2534
|
+
console.log(`# Boundary is ${boundary}`);
|
|
2527
2535
|
}
|
|
2528
2536
|
const planerot = uniqueplanes(boundary, this.rotations);
|
|
2529
2537
|
const planes = planerot.map((_) => boundary.rotateplane(_));
|
|
@@ -2539,23 +2547,26 @@ var PuzzleGeometry = class {
|
|
|
2539
2547
|
let normal = null;
|
|
2540
2548
|
let distance = 0;
|
|
2541
2549
|
switch (cut.cutType) {
|
|
2542
|
-
case "f":
|
|
2550
|
+
case "f": {
|
|
2543
2551
|
normal = facenormal;
|
|
2544
2552
|
distance = 1;
|
|
2545
2553
|
sawface = true;
|
|
2546
2554
|
break;
|
|
2547
|
-
|
|
2555
|
+
}
|
|
2556
|
+
case "v": {
|
|
2548
2557
|
normal = vertexnormal;
|
|
2549
2558
|
distance = this.vertexdistance;
|
|
2550
2559
|
sawvertex = true;
|
|
2551
2560
|
break;
|
|
2552
|
-
|
|
2561
|
+
}
|
|
2562
|
+
case "e": {
|
|
2553
2563
|
normal = edgenormal;
|
|
2554
2564
|
distance = this.edgedistance;
|
|
2555
2565
|
sawedge = true;
|
|
2556
2566
|
break;
|
|
2567
|
+
}
|
|
2557
2568
|
default:
|
|
2558
|
-
throw new Error(
|
|
2569
|
+
throw new Error(`Bad cut argument: ${cut.cutType}`);
|
|
2559
2570
|
}
|
|
2560
2571
|
cutplanes.push(normal.makecut(cut.distance));
|
|
2561
2572
|
intersects.push(cut.distance < distance);
|
|
@@ -2711,14 +2722,14 @@ var PuzzleGeometry = class {
|
|
|
2711
2722
|
}
|
|
2712
2723
|
for (let i = 0; i < edgenames.length; i++) {
|
|
2713
2724
|
if (edgenames[i].length !== 3) {
|
|
2714
|
-
throw new Error(
|
|
2725
|
+
throw new Error(`Bad length in edge names ${edgenames[i]}`);
|
|
2715
2726
|
}
|
|
2716
2727
|
const f1 = edgenames[i][1];
|
|
2717
2728
|
const f2 = edgenames[i][2];
|
|
2718
2729
|
let c1 = faceindextoname[f1];
|
|
2719
2730
|
const c2 = faceindextoname[f2];
|
|
2720
2731
|
const bits = 1 << f1 | 1 << f2;
|
|
2721
|
-
if (markedface[bits]
|
|
2732
|
+
if (markedface[bits] === f1) {
|
|
2722
2733
|
c1 = c1 + sep + c2;
|
|
2723
2734
|
} else {
|
|
2724
2735
|
c1 = c2 + sep + c1;
|
|
@@ -2763,9 +2774,9 @@ var PuzzleGeometry = class {
|
|
|
2763
2774
|
}
|
|
2764
2775
|
this.markedface = markedface;
|
|
2765
2776
|
if (this.options.verbosity > 1) {
|
|
2766
|
-
console.log(
|
|
2767
|
-
console.log(
|
|
2768
|
-
console.log(
|
|
2777
|
+
console.log(`# Face names: ${facenames.map((_) => _[1]).join(" ")}`);
|
|
2778
|
+
console.log(`# Edge names: ${edgenames.map((_) => _[1]).join(" ")}`);
|
|
2779
|
+
console.log(`# Vertex names: ${vertexnames.map((_) => _[1]).join(" ")}`);
|
|
2769
2780
|
}
|
|
2770
2781
|
const geonormals = [];
|
|
2771
2782
|
for (const faceplane of faceplanes) {
|
|
@@ -2786,7 +2797,7 @@ var PuzzleGeometry = class {
|
|
|
2786
2797
|
this.swizzler.setGripNames(geonormalnames);
|
|
2787
2798
|
if (this.options.verbosity > 0) {
|
|
2788
2799
|
console.log(
|
|
2789
|
-
|
|
2800
|
+
`# Distances: face ${1} edge ${this.edgedistance} vertex ${this.vertexdistance}`
|
|
2790
2801
|
);
|
|
2791
2802
|
}
|
|
2792
2803
|
for (let c = 0; c < cutplanes.length; c++) {
|
|
@@ -2819,7 +2830,7 @@ var PuzzleGeometry = class {
|
|
|
2819
2830
|
const faces = ft.collect([], true);
|
|
2820
2831
|
this.faces = faces;
|
|
2821
2832
|
if (this.options.verbosity > 0) {
|
|
2822
|
-
console.log(
|
|
2833
|
+
console.log(`# Faces is now ${faces.length}`);
|
|
2823
2834
|
}
|
|
2824
2835
|
this.stickersperface = faces.length;
|
|
2825
2836
|
const simplerot = [];
|
|
@@ -2869,7 +2880,7 @@ var PuzzleGeometry = class {
|
|
|
2869
2880
|
}
|
|
2870
2881
|
}
|
|
2871
2882
|
if (this.options.verbosity > 0) {
|
|
2872
|
-
console.log(
|
|
2883
|
+
console.log(`# Short edge is ${this.shortedge}`);
|
|
2873
2884
|
}
|
|
2874
2885
|
if (shape === "c" && sawface && !sawedge && !sawvertex) {
|
|
2875
2886
|
this.addNotationMapper = "NxNxNCubeMapper";
|
|
@@ -2886,7 +2897,7 @@ var PuzzleGeometry = class {
|
|
|
2886
2897
|
this.swizzler,
|
|
2887
2898
|
new FaceNameSwizzler(["F", "D", "L", "BL", "R", "U", "BR", "B"])
|
|
2888
2899
|
);
|
|
2889
|
-
if (!sawedge
|
|
2900
|
+
if (!(sawedge || sawvertex)) {
|
|
2890
2901
|
this.addNotationMapper = "FTOMapper";
|
|
2891
2902
|
}
|
|
2892
2903
|
}
|
|
@@ -3005,7 +3016,7 @@ var PuzzleGeometry = class {
|
|
|
3005
3016
|
const t1 = tstart("allstickers");
|
|
3006
3017
|
this.faces = expandfaces(this.baseplanerot, this.faces);
|
|
3007
3018
|
if (this.options.verbosity > 0) {
|
|
3008
|
-
console.log(
|
|
3019
|
+
console.log(`# Total stickers is now ${this.faces.length}`);
|
|
3009
3020
|
}
|
|
3010
3021
|
this.facecentermass = new Array(this.faces.length);
|
|
3011
3022
|
for (let i = 0; i < this.faces.length; i++) {
|
|
@@ -3050,7 +3061,7 @@ var PuzzleGeometry = class {
|
|
|
3050
3061
|
this.moveplanenormals = moveplanenormals;
|
|
3051
3062
|
const sizes = moveplanesets.map((_) => _.length);
|
|
3052
3063
|
if (this.options.verbosity > 0) {
|
|
3053
|
-
console.log(
|
|
3064
|
+
console.log(`# Move plane sets: ${sizes}`);
|
|
3054
3065
|
}
|
|
3055
3066
|
const moverotations = [];
|
|
3056
3067
|
for (let i = 0; i < moveplanesets.length; i++) {
|
|
@@ -3161,7 +3172,7 @@ var PuzzleGeometry = class {
|
|
|
3161
3172
|
console.log("# Splitting core.");
|
|
3162
3173
|
}
|
|
3163
3174
|
for (let suff = 0; suff < arr.length; suff++) {
|
|
3164
|
-
const s2 = s
|
|
3175
|
+
const s2 = `${s} ${suff}`;
|
|
3165
3176
|
facelisthash.set(s2, [arr[suff]]);
|
|
3166
3177
|
}
|
|
3167
3178
|
}
|
|
@@ -3169,7 +3180,7 @@ var PuzzleGeometry = class {
|
|
|
3169
3180
|
}
|
|
3170
3181
|
this.facelisthash = facelisthash;
|
|
3171
3182
|
if (this.options.verbosity > 0) {
|
|
3172
|
-
console.log(
|
|
3183
|
+
console.log(`# Cubies: ${facelisthash.size}`);
|
|
3173
3184
|
}
|
|
3174
3185
|
const cubies = [];
|
|
3175
3186
|
const facetocubie = [];
|
|
@@ -3349,12 +3360,12 @@ var PuzzleGeometry = class {
|
|
|
3349
3360
|
}
|
|
3350
3361
|
if (this.fixedCubie < 0) {
|
|
3351
3362
|
throw new Error(
|
|
3352
|
-
|
|
3363
|
+
`Could not find a cubie of type ${this.options.fixedPieceType} to fix.`
|
|
3353
3364
|
);
|
|
3354
3365
|
}
|
|
3355
3366
|
}
|
|
3356
3367
|
if (this.options.verbosity > 0) {
|
|
3357
|
-
console.log(
|
|
3368
|
+
console.log(`# Cubie orbit sizes ${cubieords}`);
|
|
3358
3369
|
}
|
|
3359
3370
|
tend(t1);
|
|
3360
3371
|
}
|
|
@@ -3369,7 +3380,7 @@ var PuzzleGeometry = class {
|
|
|
3369
3380
|
const re = RegExp("^(([0-9]+)-)?([0-9]+)?([^0-9]+)([0-9]+'?)?$");
|
|
3370
3381
|
const p = mv.match(re);
|
|
3371
3382
|
if (p === null) {
|
|
3372
|
-
throw new Error(
|
|
3383
|
+
throw new Error(`Bad move passed ${mv}`);
|
|
3373
3384
|
}
|
|
3374
3385
|
const grip = p[4];
|
|
3375
3386
|
let loslice = void 0;
|
|
@@ -3388,7 +3399,7 @@ var PuzzleGeometry = class {
|
|
|
3388
3399
|
if (p[5] !== void 0) {
|
|
3389
3400
|
amountstr = p[5];
|
|
3390
3401
|
if (amountstr[0] === "'") {
|
|
3391
|
-
amountstr =
|
|
3402
|
+
amountstr = `-${amountstr.substring(1)}`;
|
|
3392
3403
|
}
|
|
3393
3404
|
amount = parseInt(amountstr, 10);
|
|
3394
3405
|
}
|
|
@@ -3397,7 +3408,7 @@ var PuzzleGeometry = class {
|
|
|
3397
3408
|
parseMove(move) {
|
|
3398
3409
|
const bm = this.notationMapper.notationToInternal(move);
|
|
3399
3410
|
if (bm === null) {
|
|
3400
|
-
throw new Error(
|
|
3411
|
+
throw new Error(`Bad move ${move.family}`);
|
|
3401
3412
|
}
|
|
3402
3413
|
move = bm;
|
|
3403
3414
|
let grip = move.family;
|
|
@@ -3435,7 +3446,7 @@ var PuzzleGeometry = class {
|
|
|
3435
3446
|
hislice = 2;
|
|
3436
3447
|
}
|
|
3437
3448
|
if (geo === void 0) {
|
|
3438
|
-
throw new Error(
|
|
3449
|
+
throw new Error(`Bad grip in move ${move.family}`);
|
|
3439
3450
|
}
|
|
3440
3451
|
if (move.outerLayer !== void 0) {
|
|
3441
3452
|
loslice = move.outerLayer;
|
|
@@ -3460,7 +3471,7 @@ var PuzzleGeometry = class {
|
|
|
3460
3471
|
}
|
|
3461
3472
|
if (loslice < 0 || loslice > this.moveplanesets[msi].length || hislice < 0 || hislice > this.moveplanesets[msi].length) {
|
|
3462
3473
|
throw new Error(
|
|
3463
|
-
|
|
3474
|
+
`Bad slice spec ${loslice} ${hislice} vs ${this.moveplanesets[msi].length}`
|
|
3464
3475
|
);
|
|
3465
3476
|
}
|
|
3466
3477
|
if (!permissivieMoveParsing && loslice === 0 && hislice === this.moveplanesets[msi].length && !fullrotation) {
|
|
@@ -3505,7 +3516,7 @@ var PuzzleGeometry = class {
|
|
|
3505
3516
|
if (Math.abs(normal.dot(this.faces[kk].get(hii2).sub(center)) - hiv) < eps3) {
|
|
3506
3517
|
hii = hii2;
|
|
3507
3518
|
}
|
|
3508
|
-
if (hii
|
|
3519
|
+
if (hii !== 0) {
|
|
3509
3520
|
const qs = [];
|
|
3510
3521
|
for (let ii = 0; ii < this.faces[kk].length; ii++) {
|
|
3511
3522
|
qs.push(this.faces[kk].get((ii + hii) % this.faces[kk].length));
|
|
@@ -3756,7 +3767,7 @@ var PuzzleGeometry = class {
|
|
|
3756
3767
|
const r = [];
|
|
3757
3768
|
const mvs = [];
|
|
3758
3769
|
for (let i = 0; i < os.moveops.length; i++) {
|
|
3759
|
-
let movename =
|
|
3770
|
+
let movename = `M_${externalName(this.notationMapper, os.movenames[i])}`;
|
|
3760
3771
|
let doinv = false;
|
|
3761
3772
|
if (movename[movename.length - 1] === "'") {
|
|
3762
3773
|
movename = movename.substring(0, movename.length - 1);
|
|
@@ -3764,9 +3775,9 @@ var PuzzleGeometry = class {
|
|
|
3764
3775
|
}
|
|
3765
3776
|
mvs.push(movename);
|
|
3766
3777
|
if (doinv) {
|
|
3767
|
-
r.push(movename
|
|
3778
|
+
r.push(`${movename}:=${os.moveops[i].toPerm().inv().toGap()};`);
|
|
3768
3779
|
} else {
|
|
3769
|
-
r.push(movename
|
|
3780
|
+
r.push(`${movename}:=${os.moveops[i].toPerm().toGap()};`);
|
|
3770
3781
|
}
|
|
3771
3782
|
}
|
|
3772
3783
|
r.push("Gen:=[");
|
|
@@ -3774,7 +3785,9 @@ var PuzzleGeometry = class {
|
|
|
3774
3785
|
r.push("];");
|
|
3775
3786
|
const ip = os.solved.identicalPieces();
|
|
3776
3787
|
r.push(
|
|
3777
|
-
|
|
3788
|
+
`ip:=[${ip.map((_) => `[${_.map((__) => __ + 1).join(",")}]`).join(
|
|
3789
|
+
","
|
|
3790
|
+
)}];`
|
|
3778
3791
|
);
|
|
3779
3792
|
r.push("# Size(Group(Gen));");
|
|
3780
3793
|
r.push("# Size(Stabilizer(Group(Gen), ip, OnTuplesSets));");
|
|
@@ -3918,7 +3931,7 @@ var PuzzleGeometry = class {
|
|
|
3918
3931
|
}
|
|
3919
3932
|
hasrotation[k] = sawone;
|
|
3920
3933
|
}
|
|
3921
|
-
if (this.options.
|
|
3934
|
+
if (this.options.addRotations && (this.options.moveList || this.options.fixedPieceType !== null)) {
|
|
3922
3935
|
for (let i = 0; i < this.moverotations.length; i++) {
|
|
3923
3936
|
addrot[i] = 0;
|
|
3924
3937
|
}
|
|
@@ -4169,14 +4182,16 @@ var PuzzleGeometry = class {
|
|
|
4169
4182
|
}
|
|
4170
4183
|
}
|
|
4171
4184
|
if (!feature1) {
|
|
4172
|
-
throw new Error(
|
|
4185
|
+
throw new Error(`Could not find feature ${feature1name}`);
|
|
4173
4186
|
}
|
|
4174
4187
|
if (!feature2) {
|
|
4175
|
-
throw new Error(
|
|
4188
|
+
throw new Error(`Could not find feature ${feature2name}`);
|
|
4176
4189
|
}
|
|
4177
4190
|
const r1 = feature1.pointrotation(direction1);
|
|
4178
4191
|
const feature2rot = feature2.rotatepoint(r1);
|
|
4179
|
-
const r2 = feature2rot.unproject(direction1).pointrotation(
|
|
4192
|
+
const r2 = feature2rot.unproject(direction1).pointrotation(
|
|
4193
|
+
direction2.unproject(direction1)
|
|
4194
|
+
);
|
|
4180
4195
|
return r2.mul(r1);
|
|
4181
4196
|
}
|
|
4182
4197
|
getInitial3DRotation() {
|
|
@@ -4283,7 +4298,7 @@ var PuzzleGeometry = class {
|
|
|
4283
4298
|
}
|
|
4284
4299
|
}
|
|
4285
4300
|
if (gfi < 0) {
|
|
4286
|
-
throw new Error(
|
|
4301
|
+
throw new Error(`Could not find first face name ${f0}`);
|
|
4287
4302
|
}
|
|
4288
4303
|
const thisface = bg.facenames[gfi][0];
|
|
4289
4304
|
for (let j = 1; j < neti.length; j++) {
|
|
@@ -4297,7 +4312,9 @@ var PuzzleGeometry = class {
|
|
|
4297
4312
|
];
|
|
4298
4313
|
extendedges(edges2[f1], polyn);
|
|
4299
4314
|
const caf0 = connectat[gfi];
|
|
4300
|
-
const mp = thisface[(caf0 + j) % polyn].sum(
|
|
4315
|
+
const mp = thisface[(caf0 + j) % polyn].sum(
|
|
4316
|
+
thisface[(caf0 + j + polyn - 1) % polyn]
|
|
4317
|
+
).smul(0.5);
|
|
4301
4318
|
const epi = findelement(bg.edgenames, mp);
|
|
4302
4319
|
const edgename = bg.edgenames[epi][1];
|
|
4303
4320
|
const el = splitByFaceNames(edgename, this.facenames);
|
|
@@ -4363,7 +4380,10 @@ var PuzzleGeometry = class {
|
|
|
4363
4380
|
generatesvg(w = 800, h = 500, trim = 10, threed = false) {
|
|
4364
4381
|
const mappt2d = this.generate2dmapping(w, h, trim, threed);
|
|
4365
4382
|
function drawedges(id, pts, color) {
|
|
4366
|
-
return
|
|
4383
|
+
return `<polygon id="${id}" class="sticker" style="fill: ${color}" points="${pts.map(
|
|
4384
|
+
(p) => `${p[0]} ${p[1]}`
|
|
4385
|
+
).join(" ")}"/>
|
|
4386
|
+
`;
|
|
4367
4387
|
}
|
|
4368
4388
|
const pos = this.getsolved();
|
|
4369
4389
|
const colormap = [];
|
|
@@ -4383,7 +4403,8 @@ var PuzzleGeometry = class {
|
|
|
4383
4403
|
const svg = [];
|
|
4384
4404
|
for (let j = 0; j < this.baseFaceCount; j++) {
|
|
4385
4405
|
svg.push("<g>");
|
|
4386
|
-
svg.push(
|
|
4406
|
+
svg.push(`<title>${this.facenames[j][1]}</title>
|
|
4407
|
+
`);
|
|
4387
4408
|
for (let ii = 0; ii < this.stickersperface; ii++) {
|
|
4388
4409
|
const i = j * this.stickersperface + ii;
|
|
4389
4410
|
const cubie = this.facetocubie[i];
|
|
@@ -4391,18 +4412,22 @@ var PuzzleGeometry = class {
|
|
|
4391
4412
|
const cubiesetnum = this.cubiesetnums[cubie];
|
|
4392
4413
|
const cubieord = this.cubieordnums[cubie];
|
|
4393
4414
|
const color = this.graybyori(cubie) ? "#808080" : colormap[pos.p[i]];
|
|
4394
|
-
let id = this.cubiesetnames[cubiesetnum]
|
|
4415
|
+
let id = `${this.cubiesetnames[cubiesetnum]}-l${cubieord}-o${cubieori}`;
|
|
4395
4416
|
svg.push(drawedges(id, facegeo[i], color));
|
|
4396
4417
|
if (this.duplicatedFaces[i]) {
|
|
4397
4418
|
for (let jj = 1; jj < this.duplicatedFaces[i]; jj++) {
|
|
4398
|
-
id = this.cubiesetnames[cubiesetnum]
|
|
4419
|
+
id = `${this.cubiesetnames[cubiesetnum]}-l${cubieord}-o${jj}`;
|
|
4399
4420
|
svg.push(drawedges(id, facegeo[i], color));
|
|
4400
4421
|
}
|
|
4401
4422
|
}
|
|
4402
4423
|
}
|
|
4403
4424
|
svg.push("</g>");
|
|
4404
4425
|
}
|
|
4405
|
-
const html =
|
|
4426
|
+
const html = `<svg id="svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 500">
|
|
4427
|
+
<style type="text/css"><![CDATA[.sticker { stroke: #000000; stroke-width: 1px; }]]></style>
|
|
4428
|
+
${svg.join(
|
|
4429
|
+
""
|
|
4430
|
+
)}</svg>`;
|
|
4406
4431
|
return html;
|
|
4407
4432
|
}
|
|
4408
4433
|
get3d(options) {
|