tptimer/pyTwistyScrambler/js_resources/pyraminx.js

91 lines
2.6 KiB
JavaScript

var pyra_scrambler = (function(circle) {
var solv = new mathlib.Solver(4, 2, [[0, l, 360], [0, i, 2592]]);
function l(a, c) {
for (var e = [], j = 5517840, f = 0, b = 0; 5 > b; b++) {
var h = k[5 - b],
d = ~~(a / h),
f = f ^ d;
a = a - d * h;
d = d << 2;
e[b] = j >> d & 15;
h = (1 << d) - 1;
j = (j & h) + (j >> 4 & ~h)
}
0 == (f & 1) ? e[5] = j : (e[5] = e[4], e[4] = j);
0 == c && circle(e, 0, 1, 3);
1 == c && circle(e, 1, 2, 5);
2 == c && circle(e, 0, 4, 2);
3 == c && circle(e, 3, 5, 4);
a = 0;
j = 5517840;
for (b = 0; 4 > b; b++) d = e[b] << 2,
a *= 6 - b,
a += j >> d & 15,
j -= 1118480 << d;
return a
}
function i(a, c) {
var e, d, f;
d = 0;
var b = [],
h = a;
for (e = 0; 4 >= e; e++) b[e] = h & 1,
h >>= 1,
d ^= b[e];
b[5] = d;
for (e = 6; 9 >= e; e++) f = ~~(h / 3),
d = h - 3 * f,
h = f,
b[e] = d;
b[c + 6] = (b[c + 6] + 1) % 3;
0 == c && (circle(b, 0, 1, 3), b[1] ^= 1, b[3] ^= 1);
1 == c && (circle(b, 1, 2, 5), b[2] ^= 1, b[5] ^= 1);
2 == c && (circle(b, 0, 4, 2), b[0] ^= 1, b[2] ^= 1);
3 == c && (circle(b, 3, 5, 4), b[3] ^= 1, b[4] ^= 1);
h = 0;
for (e = 9; 6 <= e; e--) h = 3 * h + b[e];
for (e = 4; 0 <= e; e--) h = 2 * h + b[e];
return h
}
var k = [1, 1, 1, 3, 12, 60, 360];
function getScramble(type) {
var l = type == 'pyrso' ? 8 : 0;
var len = 0;
do {
var st = mathlib.rn(360 * 2592 - 1) + 1;
var i = st % 360;
var g = ~~(st / 360);
len = solv.search([i, g], 0).length;
k = solv.toStr(solv.search([i, g], l), "ULRB", ["", "'"]) + ' ';
for (g = 0; g < 4; g++) {
i = mathlib.rn(3);
if (i < 2) {
k += "lrbu".charAt(g) + [" ", "' "][i] + " ";
len++;
}
}
} while (len < 6);
return k
}
function getPyraWCAScramble(){
return getScramble('pyrso');
}
function getPyraOptimalScramble(){
return getScramble('pyro');
}
return {
getPyraWCAScramble: getPyraWCAScramble,
getPyraOptimalScramble: getPyraOptimalScramble
}
//scramble.reg(['pyro', 'pyrso'], getScramble);
})(mathlib.circle);