cubing 0.26.1 → 0.26.2

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.
Files changed (137) hide show
  1. package/dist/esm/.DS_Store +0 -0
  2. package/dist/esm/alg/index.js +1 -1
  3. package/dist/esm/bluetooth/index.js +3 -3
  4. package/dist/esm/bluetooth/index.js.map +1 -1
  5. package/dist/esm/{chunk-CYG3DDTX.js → chunk-3ADPLDWG.js} +17 -10
  6. package/dist/esm/chunk-3ADPLDWG.js.map +7 -0
  7. package/dist/esm/{chunk-PDVAUAMY.js → chunk-3NFDCQI2.js} +5 -40
  8. package/dist/esm/chunk-3NFDCQI2.js.map +7 -0
  9. package/dist/esm/{chunk-JIBAUV55.js → chunk-4OCHKVLJ.js} +9 -9
  10. package/dist/esm/chunk-4OCHKVLJ.js.map +7 -0
  11. package/dist/esm/{chunk-RHC3DIN3.js → chunk-BEXHMXCT.js} +1 -1
  12. package/dist/esm/{chunk-RHC3DIN3.js.map → chunk-BEXHMXCT.js.map} +1 -1
  13. package/dist/esm/{chunk-QZOJPCN5.js → chunk-DO7GZAW4.js} +1 -1
  14. package/dist/esm/{chunk-QZOJPCN5.js.map → chunk-DO7GZAW4.js.map} +1 -1
  15. package/dist/esm/{chunk-XQKTAWAA.js → chunk-ESSOEWR6.js} +15 -15
  16. package/dist/esm/chunk-ESSOEWR6.js.map +7 -0
  17. package/dist/esm/{chunk-3CEMUTUD.js → chunk-FB7SFELN.js} +2 -2
  18. package/dist/esm/{chunk-3CEMUTUD.js.map → chunk-FB7SFELN.js.map} +1 -1
  19. package/dist/esm/{chunk-ALBEW4DJ.js → chunk-GBMX6FHY.js} +1 -1
  20. package/dist/esm/{chunk-ALBEW4DJ.js.map → chunk-GBMX6FHY.js.map} +1 -1
  21. package/dist/esm/{chunk-HUCMGBEC.js → chunk-HD2CMNE4.js} +2 -2
  22. package/dist/esm/{chunk-HUCMGBEC.js.map → chunk-HD2CMNE4.js.map} +1 -1
  23. package/dist/esm/{chunk-5Q4SJSNY.js → chunk-NSLR2SC4.js} +2 -2
  24. package/dist/esm/{chunk-5Q4SJSNY.js.map → chunk-NSLR2SC4.js.map} +1 -1
  25. package/dist/esm/{chunk-V55YSWJY.js → chunk-NYAPGKCW.js} +1 -1
  26. package/dist/esm/{chunk-V55YSWJY.js.map → chunk-NYAPGKCW.js.map} +1 -1
  27. package/dist/esm/{chunk-J7OB2GEM.js → chunk-RGEST6KF.js} +13 -11
  28. package/dist/esm/chunk-RGEST6KF.js.map +7 -0
  29. package/dist/esm/chunk-YBDBUTYE.js +42 -0
  30. package/dist/esm/chunk-YBDBUTYE.js.map +7 -0
  31. package/dist/esm/{chunk-AD6PFNOU.js → chunk-ZPAGJE7S.js} +2 -2
  32. package/dist/esm/{chunk-AD6PFNOU.js.map → chunk-ZPAGJE7S.js.map} +1 -1
  33. package/dist/esm/kpuzzle/index.js +2 -2
  34. package/dist/esm/notation/index.js +2 -2
  35. package/dist/esm/protocol/index.js +2 -2
  36. package/dist/esm/puzzle-geometry/index.js +6 -2
  37. package/dist/esm/puzzles/index.js +3 -3
  38. package/dist/esm/{3x3x3.kpuzzle.svg-5U7LUACF.js → puzzles-dynamic-3x3x3-NB2PEZTV.js} +115 -4
  39. package/dist/esm/puzzles-dynamic-3x3x3-NB2PEZTV.js.map +7 -0
  40. package/dist/esm/puzzles-dynamic-side-events-CXNWDLKD.js +1855 -0
  41. package/dist/esm/puzzles-dynamic-side-events-CXNWDLKD.js.map +7 -0
  42. package/dist/esm/puzzles-dynamic-unofficial-CKTRIKMY.js +399 -0
  43. package/dist/esm/puzzles-dynamic-unofficial-CKTRIKMY.js.map +7 -0
  44. package/dist/esm/scramble/index.js +9 -8
  45. package/dist/esm/search/index.js +9 -8
  46. package/dist/esm/{chunk-PMKVGKT4.js → search-dynamic-sgs-side-events-ZDPMZ4Y7.js} +322 -8
  47. package/dist/esm/search-dynamic-sgs-side-events-ZDPMZ4Y7.js.map +7 -0
  48. package/dist/esm/{fto.dynamic-ISSUUAOX.js → search-dynamic-sgs-unofficial-RAGEBTDP.js} +564 -11
  49. package/dist/esm/search-dynamic-sgs-unofficial-RAGEBTDP.js.map +7 -0
  50. package/dist/esm/{3x3x3-min2phase-GFNNX26U.js → search-dynamic-solve-3x3x3-K4TG7P3X.js} +1 -1
  51. package/dist/esm/{3x3x3-min2phase-GFNNX26U.js.map → search-dynamic-solve-3x3x3-K4TG7P3X.js.map} +1 -1
  52. package/dist/esm/{444-solver-2ECPETB3.js → search-dynamic-solve-4x4x4-W455FUFG.js} +7 -6
  53. package/dist/esm/{444-solver-2ECPETB3.js.map → search-dynamic-solve-4x4x4-W455FUFG.js.map} +1 -1
  54. package/dist/esm/{fto-solver-5EQEC77M.js → search-dynamic-solve-fto-ZM45FTCO.js} +2 -2
  55. package/dist/esm/{fto-solver-5EQEC77M.js.map → search-dynamic-solve-fto-ZM45FTCO.js.map} +1 -1
  56. package/dist/esm/{kilosolver-RP3POREU.js → search-dynamic-solve-kilominx-PAW6HKT5.js} +3 -5
  57. package/dist/esm/{kilosolver-RP3POREU.js.map → search-dynamic-solve-kilominx-PAW6HKT5.js.map} +1 -1
  58. package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js → search-dynamic-solve-master_tetraminx-3R2CJUKW.js} +2 -4
  59. package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js.map → search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map} +1 -1
  60. package/dist/esm/{sq1-solver-G73T6FTJ.js → search-dynamic-solve-sq1-RS5HN6AH.js} +2 -2
  61. package/dist/esm/{sq1-solver-G73T6FTJ.js.map → search-dynamic-solve-sq1-RS5HN6AH.js.map} +1 -1
  62. package/dist/esm/{worker-inside-generated-string-4FDHMKDI.js → search-worker-inside-generated-string-VBEHCGJ6.js} +1335 -1335
  63. package/dist/esm/search-worker-inside-generated-string-VBEHCGJ6.js.map +7 -0
  64. package/dist/esm/{search-worker-js-entry-CZHIWNVF.js → search-worker-js-entry-5IIKIMTU.js} +50 -65
  65. package/dist/esm/search-worker-js-entry-5IIKIMTU.js.map +7 -0
  66. package/dist/esm/{search-worker-ts-entry-4WJDKASM.js → search-worker-ts-entry-BV3J54MW.js} +5 -5
  67. package/dist/esm/{search-worker-ts-entry-4WJDKASM.js.map → search-worker-ts-entry-BV3J54MW.js.map} +1 -1
  68. package/dist/esm/stream/index.js +1 -1
  69. package/dist/esm/stream/index.js.map +1 -1
  70. package/dist/esm/twisty/index.js +64 -15
  71. package/dist/esm/twisty/index.js.map +3 -3
  72. package/dist/esm/{3d-dynamic-OTQHIOVR.js → twisty-dynamic-3d-KFFJZNMZ.js} +8 -7
  73. package/dist/esm/{3d-dynamic-OTQHIOVR.js.map → twisty-dynamic-3d-KFFJZNMZ.js.map} +2 -2
  74. package/dist/types/{KPuzzleDefinition-8531b592.d.ts → KPuzzleDefinition-121e85a8.d.ts} +12 -8
  75. package/dist/types/{KState-ba36d9a3.d.ts → KState-73482114.d.ts} +1 -1
  76. package/dist/types/PuzzleLoader-9243f44d.d.ts +1177 -0
  77. package/dist/types/bluetooth/index.d.ts +4 -4
  78. package/dist/types/{bluetooth-puzzle-bc1a5264.d.ts → bluetooth-puzzle-679d8ca3.d.ts} +1 -1
  79. package/dist/types/kpuzzle/index.d.ts +3 -3
  80. package/dist/types/{outside-d6602f71.d.ts → outside-f7ba9c00.d.ts} +1 -1
  81. package/dist/types/protocol/index.d.ts +2 -2
  82. package/dist/types/puzzle-geometry/index.d.ts +3 -3
  83. package/dist/types/puzzles/index.d.ts +6 -4
  84. package/dist/types/scramble/index.d.ts +3 -3
  85. package/dist/types/search/index.d.ts +3 -3
  86. package/dist/types/stream/index.d.ts +3 -3
  87. package/dist/types/twisty/index.d.ts +8 -977
  88. package/package.json +4 -3
  89. package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js +0 -96
  90. package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js.map +0 -7
  91. package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js +0 -52
  92. package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js.map +0 -7
  93. package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js +0 -122
  94. package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js.map +0 -7
  95. package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js +0 -115
  96. package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js.map +0 -7
  97. package/dist/esm/3x3x3.kpuzzle.svg-5U7LUACF.js.map +0 -7
  98. package/dist/esm/chunk-CRU5TVHA.js +0 -122
  99. package/dist/esm/chunk-CRU5TVHA.js.map +0 -7
  100. package/dist/esm/chunk-CYG3DDTX.js.map +0 -7
  101. package/dist/esm/chunk-J7OB2GEM.js.map +0 -7
  102. package/dist/esm/chunk-JIBAUV55.js.map +0 -7
  103. package/dist/esm/chunk-MC2D6L32.js +0 -103
  104. package/dist/esm/chunk-MC2D6L32.js.map +0 -7
  105. package/dist/esm/chunk-PDVAUAMY.js.map +0 -7
  106. package/dist/esm/chunk-PMKVGKT4.js.map +0 -7
  107. package/dist/esm/chunk-XQKTAWAA.js.map +0 -7
  108. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js +0 -714
  109. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js.map +0 -7
  110. package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js +0 -376
  111. package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js.map +0 -7
  112. package/dist/esm/fto.dynamic-ISSUUAOX.js.map +0 -7
  113. package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js +0 -102
  114. package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js.map +0 -7
  115. package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js +0 -83
  116. package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js.map +0 -7
  117. package/dist/esm/megaminx.sgs.json-NUXKWG2L.js +0 -16
  118. package/dist/esm/megaminx.sgs.json-NUXKWG2L.js.map +0 -7
  119. package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js +0 -95
  120. package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js.map +0 -7
  121. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js +0 -14
  122. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js.map +0 -7
  123. package/dist/esm/redi_cube-5B6YHJGL.js +0 -565
  124. package/dist/esm/redi_cube-5B6YHJGL.js.map +0 -7
  125. package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js +0 -66
  126. package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js.map +0 -7
  127. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js +0 -160
  128. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js.map +0 -7
  129. package/dist/esm/search-worker-js-entry-CZHIWNVF.js.map +0 -7
  130. package/dist/esm/skewb.sgs.json-IMR7QJQC.js +0 -16
  131. package/dist/esm/skewb.sgs.json-IMR7QJQC.js.map +0 -7
  132. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js +0 -244
  133. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js.map +0 -7
  134. package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js +0 -302
  135. package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js.map +0 -7
  136. package/dist/esm/worker-inside-generated-string-4FDHMKDI.js.map +0 -7
  137. package/dist/types/PuzzleLoader-a7faf593.d.ts +0 -172
@@ -1,18 +1,19 @@
1
1
  import {
2
2
  parseSGS
3
- } from "./chunk-3CEMUTUD.js";
3
+ } from "./chunk-FB7SFELN.js";
4
+ import {
5
+ randomUIntBelowFactory
6
+ } from "./chunk-NYAPGKCW.js";
4
7
  import {
5
8
  puzzles
6
- } from "./chunk-XQKTAWAA.js";
7
- import "./chunk-HUCMGBEC.js";
8
- import "./chunk-QZOJPCN5.js";
9
+ } from "./chunk-ESSOEWR6.js";
10
+ import "./chunk-HD2CMNE4.js";
11
+ import {
12
+ Alg
13
+ } from "./chunk-DO7GZAW4.js";
9
14
  import "./chunk-MGJA5U5O.js";
10
15
 
11
- // src/cubing/search/inside/solve/puzzles/fto.dynamic.ts
12
- async function randomFTOScrambleString() {
13
- const { randomFTOScrambleString: randomFTOScrambleString2 } = await import("./fto-solver-5EQEC77M.js");
14
- return randomFTOScrambleString2();
15
- }
16
+ // src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/fto.sgs.ts
16
17
  var cachedData = null;
17
18
  async function sgsDataFTO() {
18
19
  return cachedData ?? (cachedData = uncachedSGSDataFTO());
@@ -639,8 +640,560 @@ Alg BR L' BL BR' BL' BR' L U BR U'
639
640
  Alg U BR' U' BR BL' BR BL BR'
640
641
  `);
641
642
  }
643
+
644
+ // src/cubing/vendor/xyzzy/redi_cube.js
645
+ function factorial(n) {
646
+ if (n < 2)
647
+ return n;
648
+ let f = 1;
649
+ for (let i = 2; i <= n; i++)
650
+ f *= i;
651
+ return f;
652
+ }
653
+ function C(n, k) {
654
+ if (k < 0 || k > n)
655
+ return 0;
656
+ if (k === 0 || k === n)
657
+ return 1;
658
+ let c = 1;
659
+ for (let i = 0; i < k; i++) {
660
+ c = c * (n - i) / (i + 1) | 0;
661
+ }
662
+ return c;
663
+ }
664
+ function permutation_to_index(perm) {
665
+ perm = perm.slice();
666
+ let n = perm.length;
667
+ let f = factorial(n - 1);
668
+ let ind = 0;
669
+ while (n > 1) {
670
+ n--;
671
+ let e = perm[0];
672
+ ind += e * f;
673
+ for (let i = 0; i < n; i++) {
674
+ let x = perm[i + 1];
675
+ perm[i] = x - (x > e);
676
+ }
677
+ f /= n;
678
+ }
679
+ return ind;
680
+ }
681
+ function index_to_permutation(ind, n) {
682
+ let perm = [];
683
+ let f = factorial(n - 1);
684
+ for (let i = 0; i < n; i++) {
685
+ perm[i] = ind / f | 0;
686
+ ind %= f;
687
+ f /= n - 1 - i;
688
+ }
689
+ for (let i = n - 2; i >= 0; i--) {
690
+ for (let j = i + 1; j < n; j++) {
691
+ perm[j] += +(perm[j] >= perm[i]);
692
+ }
693
+ }
694
+ return perm;
695
+ }
696
+ function permutation_parity(A) {
697
+ let n = A.length;
698
+ let parity = 0;
699
+ for (let i = 0; i < n - 1; i++) {
700
+ for (let j = i; j < n; j++) {
701
+ if (A[i] > A[j])
702
+ parity ^= 1;
703
+ }
704
+ }
705
+ return parity;
706
+ }
707
+ function index_to_evenpermutation(ind, n) {
708
+ let perm = [];
709
+ let f = factorial(n - 1) / 2;
710
+ let parity = 0;
711
+ for (let i = 0; i < n - 1; i++) {
712
+ perm[i] = ind / f | 0;
713
+ ind %= f;
714
+ f /= n - 1 - i;
715
+ }
716
+ perm[n - 1] = 0;
717
+ for (let i = n - 2; i >= 0; i--) {
718
+ for (let j = i + 1; j < n; j++) {
719
+ if (perm[j] >= perm[i])
720
+ perm[j]++;
721
+ else
722
+ parity ^= 1;
723
+ }
724
+ }
725
+ if (parity === 1)
726
+ [perm[n - 2], perm[n - 1]] = [perm[n - 1], perm[n - 2]];
727
+ return perm;
728
+ }
729
+ function evenpermutation_to_index(perm) {
730
+ return permutation_to_index(perm) >> 1;
731
+ }
732
+ function comb_to_index(l) {
733
+ let bits = l.length;
734
+ let ones = 0;
735
+ for (let i = 0; i < bits; i++)
736
+ ones += +(l[i] === 1);
737
+ let zeros = bits - ones;
738
+ if (zeros === 0 || ones === 0 || bits === 1)
739
+ return 0;
740
+ let b = C(bits - 1, ones);
741
+ let ind = 0;
742
+ for (let i = 0; zeros > 0 && ones > 0 && bits > 1; i++) {
743
+ bits--;
744
+ if (l[i] === 0) {
745
+ b = b * --zeros / bits;
746
+ } else {
747
+ ind += b;
748
+ b = b * ones-- / bits;
749
+ }
750
+ }
751
+ return ind;
752
+ }
753
+ function index_to_comb(ind, ones, bits) {
754
+ let zeros = bits - ones;
755
+ let b = C(bits - 1, ones);
756
+ let l = [];
757
+ let n = bits - 1;
758
+ for (let i = 0; i < n; i++) {
759
+ bits--;
760
+ if (ind < b) {
761
+ l.push(0);
762
+ b = b * --zeros / bits;
763
+ } else {
764
+ l.push(1);
765
+ ind -= b;
766
+ b = b * ones-- / bits;
767
+ }
768
+ }
769
+ l.push(ones);
770
+ return l;
771
+ }
772
+ function compose(A, B) {
773
+ let C2 = [];
774
+ for (let i = 0; i < B.length; i++)
775
+ C2[i] = A[B[i]];
776
+ return C2;
777
+ }
778
+ function permutation_from_cycle(cycle, n) {
779
+ let perm = [];
780
+ for (let i = 0; i < n; i++)
781
+ perm[i] = i;
782
+ for (let i = 0; i < cycle.length; i++) {
783
+ perm[cycle[i]] = cycle[(i + 1) % cycle.length];
784
+ }
785
+ return perm;
786
+ }
787
+ function unsparsify_list(d, n) {
788
+ let l = Array(n).fill(0);
789
+ for (let k in d)
790
+ l[k] = d[k];
791
+ return l;
792
+ }
793
+ function compose_state(state1, state2) {
794
+ let o = Array(8).fill(0);
795
+ for (let i = 0; i < 8; i++)
796
+ o[i] = (state1[1][i] + state2[1][i]) % 3;
797
+ return [compose(state1[0], state2[0]), o];
798
+ }
799
+ var move_UL = [
800
+ permutation_from_cycle([0, 1, 4], 12),
801
+ unsparsify_list({ 0: 2 }, 8)
802
+ ];
803
+ var move_U = [
804
+ permutation_from_cycle([1, 2, 5], 12),
805
+ unsparsify_list({ 1: 2 }, 8)
806
+ ];
807
+ var move_UR = [
808
+ permutation_from_cycle([2, 3, 6], 12),
809
+ unsparsify_list({ 2: 2 }, 8)
810
+ ];
811
+ var move_F = [
812
+ permutation_from_cycle([3, 0, 7], 12),
813
+ unsparsify_list({ 3: 2 }, 8)
814
+ ];
815
+ var move_L = [
816
+ permutation_from_cycle([9, 8, 4], 12),
817
+ unsparsify_list({ 4: 2 }, 8)
818
+ ];
819
+ var move_B = [
820
+ permutation_from_cycle([10, 9, 5], 12),
821
+ unsparsify_list({ 5: 2 }, 8)
822
+ ];
823
+ var move_R = [
824
+ permutation_from_cycle([11, 10, 6], 12),
825
+ unsparsify_list({ 6: 2 }, 8)
826
+ ];
827
+ var move_D = [
828
+ permutation_from_cycle([8, 11, 7], 12),
829
+ unsparsify_list({ 7: 2 }, 8)
830
+ ];
831
+ var solved = [index_to_permutation(0, 12), Array(8).fill(0)];
832
+ var moves = [move_UL, move_U, move_UR, move_F, move_L, move_B, move_R, move_D];
833
+ var move_names = ["UL", "U", "UR", "F", "L", "B", "R", "D"];
834
+ var tetrad = [0, 1, 0, 1, 1, 0, 1, 0];
835
+ function stringify_move_sequence(move_sequence) {
836
+ let suffixes = ["0", "", "'"];
837
+ let s = move_sequence.map(([m, r]) => move_names[m] + suffixes[r]);
838
+ return s.join(" ");
839
+ }
840
+ function generate_random_state(randomUintBelow2) {
841
+ let p = index_to_evenpermutation(Math.floor(randomUintBelow2(factorial(12)) / 2), 12);
842
+ let o = Array(8);
843
+ for (let i = 0; i < 8; i++)
844
+ o[i] = randomUintBelow2(3);
845
+ return [p, o];
846
+ }
847
+ function generate_random_state_scramble(randomUintBelow2) {
848
+ return solve(generate_random_state(randomUintBelow2));
849
+ }
850
+ function solve(state) {
851
+ let phase1_indices = index_phase1(state);
852
+ let phase1_mtables = [
853
+ generate_phase1_edge_mtable(),
854
+ generate_phase1_separate_mtable()
855
+ ];
856
+ let phase1_ptables = [
857
+ generate_phase1_edge_ptable(),
858
+ generate_phase1_separate_ptable()
859
+ ];
860
+ let phase2_mtables = [
861
+ generate_phase2_edge_mtable(),
862
+ generate_phase2_corner_mtable()
863
+ ];
864
+ let phase2_ptables = [
865
+ generate_phase2_edge_ptable(),
866
+ generate_phase1_corner_ptable()
867
+ ];
868
+ let phase1gen = ida_solve_gen(phase1_indices, phase1_mtables, phase1_ptables);
869
+ let best = void 0;
870
+ let intermediate_states = /* @__PURE__ */ new Set();
871
+ let start_time = +new Date();
872
+ for (let i = 0; i < 25; i++) {
873
+ let { value: sol1, done } = phase1gen.next();
874
+ let new_state = state;
875
+ for (let [m, r] of sol1) {
876
+ for (let i2 = 0; i2 < r; i2++)
877
+ new_state = compose_state(new_state, moves[m]);
878
+ }
879
+ if (intermediate_states.has(new_state.toString())) {
880
+ continue;
881
+ } else
882
+ intermediate_states.add(new_state.toString());
883
+ let edge_ind = evenpermutation_to_index(new_state[0].slice(0, 8));
884
+ let corner_ind = 0;
885
+ for (let i2 = 0; i2 < 4; i2++)
886
+ corner_ind += new_state[1][i2] * 3 ** i2;
887
+ let phase2_indices = [edge_ind, corner_ind];
888
+ let moves_left = best ? best.length - sol1.length - 1 : 999999;
889
+ let sol2 = ida_solve(phase2_indices, phase2_mtables, phase2_ptables, moves_left);
890
+ if (sol2 === void 0) {
891
+ continue;
892
+ }
893
+ if (best === void 0 || best.length > sol1.length + sol2.length) {
894
+ best = sol1.concat(sol2);
895
+ }
896
+ if (new Date() - start_time > 300)
897
+ break;
898
+ }
899
+ return best;
900
+ }
901
+ function index_phase1(state) {
902
+ let edge_ind = 0;
903
+ for (let i = 0; i < 4; i++)
904
+ edge_ind += state[0].indexOf(i + 8) * 12 ** i;
905
+ let corner_ind = 0;
906
+ for (let i = 0; i < 4; i++)
907
+ corner_ind += state[1][i + 4] * 3 ** i;
908
+ let filtered = state[0].map((x) => Math.max(-1, x - 8));
909
+ let separate_ind = comb_to_index(filtered.map((x) => +(x >= 0))) * 2 + permutation_parity(filtered.filter((x) => x >= 0));
910
+ return [edge_ind, corner_ind + 81 * separate_ind];
911
+ }
912
+ var tables = {};
913
+ function generate_phase1_corner_mtable() {
914
+ if (tables.phase1cm)
915
+ return tables.phase1cm;
916
+ let mtable = [];
917
+ for (let i = 0; i < 81; i++) {
918
+ mtable[i] = Array(8);
919
+ let o = [
920
+ i % 3,
921
+ Math.floor(i / 3) % 3,
922
+ Math.floor(i / 9) % 3,
923
+ Math.floor(i / 27)
924
+ ];
925
+ mtable[i][0] = mtable[i][1] = mtable[i][2] = mtable[i][3] = i;
926
+ for (let j = 0; j < 4; j++) {
927
+ o[j] = (o[j] + 2) % 3;
928
+ mtable[i][4 + j] = o[0] + o[1] * 3 + o[2] * 9 + o[3] * 27;
929
+ o[j] = (o[j] + 1) % 3;
930
+ }
931
+ }
932
+ return tables.phase1cm = mtable;
933
+ }
934
+ function generate_phase1_corner_ptable() {
935
+ if (tables.phase1cp)
936
+ return tables.phase1cp;
937
+ let ptable = Array(81);
938
+ for (let i = 0; i < 81; i++) {
939
+ let o = [
940
+ i % 3,
941
+ Math.floor(i / 3) % 3,
942
+ Math.floor(i / 9) % 3,
943
+ Math.floor(i / 27)
944
+ ];
945
+ ptable[i] = (o[0] !== 0) + (o[1] !== 0) + (o[2] !== 0) + (o[3] !== 0);
946
+ }
947
+ return tables.phase1cp = ptable;
948
+ }
949
+ function generate_phase1_edge_mtable() {
950
+ if (tables.phase1em)
951
+ return tables.phase1em;
952
+ let mtable_single = [];
953
+ for (let i = 0; i < 12; i++) {
954
+ mtable_single[i] = [];
955
+ for (let m = 0; m < 8; m++) {
956
+ mtable_single[i][m] = moves[m][0].indexOf(i);
957
+ }
958
+ }
959
+ let mtable = Array(12 ** 4);
960
+ for (let i = 0; i < 12 ** 4; i++) {
961
+ mtable[i] = Array(8);
962
+ for (let m = 0; m < 8; m++) {
963
+ let I = 0;
964
+ for (let j = 0; j < 4; j++) {
965
+ I += mtable_single[Math.floor(i / 12 ** j) % 12][m] * 12 ** j;
966
+ }
967
+ mtable[i][m] = I;
968
+ }
969
+ }
970
+ return tables.phase1em = mtable;
971
+ }
972
+ function generate_phase1_edge_ptable() {
973
+ if (tables.phase1ep)
974
+ return tables.phase1ep;
975
+ return tables.phase1ep = bfs(generate_phase1_edge_mtable(), [
976
+ 8 + 12 * (9 + 12 * (10 + 12 * 11))
977
+ ]);
978
+ }
979
+ function generate_phase1_separate_mtable() {
980
+ if (tables.phase1sm)
981
+ return tables.phase1sm;
982
+ const C12_4 = C(12, 4);
983
+ let mtable_c = [];
984
+ for (let i = 0; i < C12_4; i++) {
985
+ mtable_c[i] = [];
986
+ let comb = index_to_comb(i, 4, 12), perm = [];
987
+ for (let j = 0, k = 0; j < 12; j++) {
988
+ if (comb[j] === 0)
989
+ perm[j] = -1;
990
+ else
991
+ perm[j] = k++;
992
+ }
993
+ for (let m = 0; m < 8; m++) {
994
+ let new_perm = compose(perm, moves[m][0]);
995
+ let new_comb = compose(comb, moves[m][0]);
996
+ let parity = permutation_parity(new_perm.filter((x) => x >= 0));
997
+ mtable_c[i][m] = comb_to_index(new_comb) * 2 + parity;
998
+ }
999
+ }
1000
+ let mtable_co = generate_phase1_corner_mtable();
1001
+ let mtable = [];
1002
+ for (let j = 0; j < C12_4; j++) {
1003
+ for (let i = 0; i < 81; i++) {
1004
+ let m0 = mtable[i + 81 * (2 * j)] = [];
1005
+ let m1 = mtable[i + 81 * (2 * j + 1)] = [];
1006
+ for (let m = 0; m < 8; m++) {
1007
+ m0[m] = mtable_co[i][m] + 81 * mtable_c[j][m];
1008
+ m1[m] = mtable_co[i][m] + 81 * (mtable_c[j][m] ^ 1);
1009
+ }
1010
+ }
1011
+ }
1012
+ return tables.phase1sm = mtable;
1013
+ }
1014
+ function generate_phase1_separate_ptable() {
1015
+ if (tables.phase1sp)
1016
+ return tables.phase1sp;
1017
+ return tables.phase1sp = bfs(generate_phase1_separate_mtable(), [0]);
1018
+ }
1019
+ function generate_phase2_corner_mtable() {
1020
+ if (tables.phase2cm)
1021
+ return tables.phase2cm;
1022
+ let phase1_mtable = generate_phase1_corner_mtable();
1023
+ let mtable = Array(81);
1024
+ for (let i = 0; i < 81; i++) {
1025
+ mtable[i] = phase1_mtable[i].slice(4, 8);
1026
+ }
1027
+ return tables.phase2cm = mtable;
1028
+ }
1029
+ function generate_phase2_edge_mtable() {
1030
+ if (tables.phase2em)
1031
+ return tables.phase2em;
1032
+ const n = 8;
1033
+ const HALFFACT8 = factorial(n) / 2;
1034
+ let mtable = Array(HALFFACT8);
1035
+ let perm = [0, 1, 2, 3, 4, 5, 6, 7];
1036
+ for (let i = 0; i < HALFFACT8; i++) {
1037
+ mtable[i] = Array(4);
1038
+ for (let m = 0; m < 4; m++) {
1039
+ let new_perm = compose(perm, moves[m][0].slice(0, 8));
1040
+ mtable[i][m] = evenpermutation_to_index(new_perm);
1041
+ }
1042
+ if (i === HALFFACT8 - 1)
1043
+ break;
1044
+ let parity = 0;
1045
+ do {
1046
+ for (let k = n - 2; k >= 0; k--) {
1047
+ if (perm[k] > perm[k + 1])
1048
+ continue;
1049
+ let l = k + 1;
1050
+ for (let L = l; L < n; L++)
1051
+ if (perm[L] > perm[k])
1052
+ l = L;
1053
+ [perm[k], perm[l]] = [perm[l], perm[k]];
1054
+ parity ^= 1;
1055
+ for (let j = 0; k + 1 + j < n - 1 - j; j++, parity ^= 1) {
1056
+ [perm[k + 1 + j], perm[n - 1 - j]] = [
1057
+ perm[n - 1 - j],
1058
+ perm[k + 1 + j]
1059
+ ];
1060
+ }
1061
+ break;
1062
+ }
1063
+ } while (parity !== 0);
1064
+ }
1065
+ return tables.phase2em = mtable;
1066
+ }
1067
+ function generate_phase2_edge_ptable() {
1068
+ if (tables.phase2ep)
1069
+ return tables.phase2ep;
1070
+ return tables.phase2ep = bfs(generate_phase2_edge_mtable(), [0]);
1071
+ }
1072
+ function bfs(mtable, goal_states) {
1073
+ let N = mtable.length;
1074
+ let nmoves = mtable[0].length;
1075
+ let ptable = Array(N).fill(-1);
1076
+ let queue = goal_states.slice(), new_queue = [];
1077
+ let depth = 0;
1078
+ while (queue.length > 0) {
1079
+ new_queue.length = 0;
1080
+ for (let state of queue) {
1081
+ if (ptable[state] !== -1)
1082
+ continue;
1083
+ ptable[state] = depth;
1084
+ for (let move_index = 0; move_index < nmoves; move_index++) {
1085
+ let new_state = mtable[state][move_index];
1086
+ while (new_state != state) {
1087
+ new_queue.push(new_state);
1088
+ new_state = mtable[new_state][move_index];
1089
+ }
1090
+ }
1091
+ }
1092
+ [queue, new_queue] = [new_queue, queue];
1093
+ depth += 1;
1094
+ }
1095
+ return ptable;
1096
+ }
1097
+ function ida_solve(indices, mtables, ptables, max_bound) {
1098
+ max_bound = max_bound || 999999;
1099
+ let ncoords = indices.length;
1100
+ let bound = 0;
1101
+ for (let i = 0; i < ncoords; i++)
1102
+ bound = Math.max(bound, ptables[i][indices[i]]);
1103
+ while (bound <= max_bound) {
1104
+ let path = ida_search(indices, mtables, ptables, bound, -1);
1105
+ if (path !== void 0)
1106
+ return path;
1107
+ bound++;
1108
+ }
1109
+ }
1110
+ function ida_search(indices, mtables, ptables, bound, last) {
1111
+ let ncoords = indices.length;
1112
+ let nmoves = mtables[0][0].length;
1113
+ let heuristic = 0;
1114
+ for (let i = 0; i < ncoords; i++)
1115
+ heuristic = Math.max(heuristic, ptables[i][indices[i]]);
1116
+ if (heuristic > bound)
1117
+ return;
1118
+ if (bound === 0)
1119
+ return [];
1120
+ if (heuristic === 0 && bound === 1)
1121
+ return;
1122
+ for (let m = 0; m < nmoves; m++) {
1123
+ if (m === last)
1124
+ continue;
1125
+ if (m < last && tetrad[m] == tetrad[last])
1126
+ continue;
1127
+ let new_indices = indices.slice();
1128
+ for (let c = 0; c < ncoords; c++)
1129
+ new_indices[c] = mtables[c][indices[c]][m];
1130
+ let r = 1;
1131
+ while (indices.some((_, i) => indices[i] != new_indices[i])) {
1132
+ let subpath = ida_search(new_indices, mtables, ptables, bound - 1, m);
1133
+ if (subpath !== void 0)
1134
+ return [[m, r]].concat(subpath);
1135
+ for (let c = 0; c < ncoords; c++) {
1136
+ new_indices[c] = mtables[c][new_indices[c]][m];
1137
+ }
1138
+ r++;
1139
+ }
1140
+ }
1141
+ return;
1142
+ }
1143
+ function* ida_solve_gen(indices, mtables, ptables) {
1144
+ let ncoords = indices.length;
1145
+ let bound = 0;
1146
+ for (let i = 0; i < ncoords; i++)
1147
+ bound = Math.max(bound, ptables[i][indices[i]]);
1148
+ while (true) {
1149
+ yield* ida_search_gen(indices, mtables, ptables, bound, -1);
1150
+ bound++;
1151
+ }
1152
+ }
1153
+ function* ida_search_gen(indices, mtables, ptables, bound, last) {
1154
+ let ncoords = indices.length;
1155
+ let nmoves = mtables[0][0].length;
1156
+ let heuristic = 0;
1157
+ for (let i = 0; i < ncoords; i++)
1158
+ heuristic = Math.max(heuristic, ptables[i][indices[i]]);
1159
+ if (heuristic > bound)
1160
+ return;
1161
+ if (bound === 0) {
1162
+ yield [];
1163
+ return;
1164
+ }
1165
+ if (heuristic === 0 && bound === 1)
1166
+ return;
1167
+ for (let m = 0; m < nmoves; m++) {
1168
+ if (m === last)
1169
+ continue;
1170
+ if (m < last && tetrad[m] == tetrad[last])
1171
+ continue;
1172
+ let new_indices = indices.slice();
1173
+ for (let c = 0; c < ncoords; c++)
1174
+ new_indices[c] = mtables[c][indices[c]][m];
1175
+ let r = 1;
1176
+ while (indices.some((_, i) => indices[i] != new_indices[i])) {
1177
+ let subpath_gen = ida_search_gen(new_indices, mtables, ptables, bound - 1, m);
1178
+ while (true) {
1179
+ let { value: subpath, done } = subpath_gen.next();
1180
+ if (done)
1181
+ break;
1182
+ yield [[m, r]].concat(subpath);
1183
+ }
1184
+ for (let c = 0; c < ncoords; c++) {
1185
+ new_indices[c] = mtables[c][new_indices[c]][m];
1186
+ }
1187
+ r++;
1188
+ }
1189
+ }
1190
+ }
1191
+ var randomUintBelow = randomUIntBelowFactory();
1192
+ async function getRandomRediCubeScramble() {
1193
+ return new Alg(stringify_move_sequence(generate_random_state_scramble(await randomUintBelow)));
1194
+ }
642
1195
  export {
643
- randomFTOScrambleString,
1196
+ getRandomRediCubeScramble,
644
1197
  sgsDataFTO
645
1198
  };
646
- //# sourceMappingURL=fto.dynamic-ISSUUAOX.js.map
1199
+ //# sourceMappingURL=search-dynamic-sgs-unofficial-RAGEBTDP.js.map