ThomasJE
Premium Member
Why don't you download Prisma Puzzle Timer, so you can use it offline? If you can't download, ctimer is a good substitute.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Can anyone tell me how to change the color scheme on qMinx? I just can't solve with the mefferts scheme. :/
Edit: I found the source, and I found Odder's color scheme (mf8). I just don't know what to do with it. T.T
<html>
<head>
<style>
.no {display:none;}
</style>
<script type="text/javascript">
<!--
// timer/qCube stuff
var solving = false, started = false;;
var size = 1;
var r1=1, r2=2, l1=1, l2=2;
var cnt = 0;
var times = [];
var startTime, curTime, timerID, inspectionID;
var browser = getBrowser();
window.onkeydown=function(event){doKey(event.keyCode, event.shiftKey)};
// minx stuff
var c;
var corners=[], edges=[], view=[];
var FACE_U = 0, FACE_F = 1, FACE_LU = 2, FACE_RU = 3, FACE_LB = 4,
FACE_RB = 5, FACE_LF = 6, FACE_RF = 7, FACE_LD = 8, FACE_RD = 9,
FACE_B = 10, FACE_D = 11;
var adjacency = [[1,2,4,5,3],[0,3,7,6,2],[0,1,6,8,4],[1,0,5,9,7],
[0,2,8,10,5],[0,4,10,9,3],[1,7,11,8,2],[1,3,9,11,6],
[6,11,10,4,2],[7,3,5,10,11],[5,4,8,11,9],[6,7,9,10,8]];
// gelatinbrian/jfly colors
/*var colors = ["#ffff00","#ff00ff","#0000ff","#00ff00",
"#ff0000","#ff7522","#00ffcc","#b20000",
"#00b200","#0080ff","#0a1262","#ffffff"];*/
// mefferts colors
/*var colors = ["#ffff00","#ff00ff","#0000ff","#00ff00",
"#ff7522","#b20000","#00ffcc","#ff0000",
"#00b200","#0080ff","#0a1262","#ffffff"];*/
// isominxsim colors
/*var colors = ["#ffff00","#ff82e8","#0000c6","#00ff00",
"#ff0000","#ffbe2b","#07ffe6","#c48342",
"#00b952","#2c8aff","#d20096","#ffffff"];*/
// odder colors (mf8)
var colors = ["#888888","#FF92BB","#00ff00","#FFFFAA",
"#FF8600","#70DBDB","#0000ff","#ff0000",
"#ffff00","#00bb00","#5C246E","#ffffff"];
function init() {
clearInterval(inspectionID); // just in case
c = $('c').getContext('2d');
$('c').height = 500;
$('c').width = 500;
setToSolved();
draw();
cnt = 0;
}
function setToSolved() {
for (var i=0; i<12; i++) {
corners[i] = [];
edges[i] = [];
for (var j=0; j<5; j++) {
corners[i][j] = [];
edges[i][j] = [];
for (var k=0; k<size; k++) {
corners[i][j][k] = [];
edges[i][j][k] = i;
for (var l=0; l<size; l++) {
corners[i][j][k][l] = i;
}
}
}
view[i] = i;
}
}
function draw() {
var h = $('c').height, w = $('c').width;
// uncomment for a background
//c.fillStyle = "#ff00ff";
//c.fillRect(0,0,w,h);
var center, length;
var p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15;
center = [w/2, h/2];
length = 150;
p1 = add(center, [0, length]);
p2 = add(center, [-.95106*length, .30902*length]);
p3 = add(center, [-.58779*length, -.80902*length]);
p4 = add(center, [.58779*length, -.80902*length]);
p5 = add(center, [.95106*length, .30902*length]);
p6 = add(center, [0, 1.61803*length]);
p7 = add(center, [.95106*length, 1.30902*length]);
p8 = add(center, [1.53884*length, .5*length]);
p9 = add(center, [1.53884*length, -.5*length]);
p10 = add(center, [.95106*length, -1.30902*length]);
p11 = add(center, [0, -1.61803*length]);
p12 = add(center, [-.95106*length, -1.30902*length]);
p13 = add(center, [-1.53884*length, -.5*length]);
p14 = add(center, [-1.53884*length, .5*length]);
p15 = add(center, [-.95106*length, 1.30902*length]);
drawPentagon(p1, p5, p4, p3, p2, FACE_F, FACE_RF, FACE_RU, FACE_U, FACE_LU, FACE_LF);
drawPentagon(p1, p6, p7, p8, p5, FACE_RF, FACE_LF, FACE_D, FACE_RD, FACE_RU, FACE_F);
drawPentagon(p5, p8, p9, p10, p4, FACE_RU, FACE_RF, FACE_RD, FACE_RB, FACE_U, FACE_F);
drawPentagon(p4, p10, p11, p12, p3, FACE_U, FACE_RU, FACE_RB, FACE_LB, FACE_LU, FACE_F);
drawPentagon(p3, p12, p13, p14, p2, FACE_LU, FACE_U, FACE_LB, FACE_LD, FACE_LF, FACE_F);
drawPentagon(p2, p14, p15, p6, p1, FACE_LF, FACE_LU, FACE_LD, FACE_D, FACE_RF, FACE_F);
}
function drawPentagon(v1, v2, v3, v4, v5, f0, f1, f2, f3, f4, f5) {
var p = [v1,v2,v3,v4,v5], f = [view[f1], view[f2], view[f3], view[f4], view[f5]];
// define the ten vectors
var v = [];
for (var i=0; i<5; i++) {
v[i*2] = mul(sub(p[(i+1)%5], p[i]), 1/(2*size+1));
v[i*2+1] = mul(sub(p[(i+4)%5], p[i]), 1/(2*size+1));
}
for (var i=0; i<5; i++) {
var x0 = v[i*2], x1 = v[i*2+1];
var y0 = v[((i+4)%5)*2], y1 = v[((i+4)%5)*2+1];
// draw the corners
for (var j=0; j<size; j++) {
for (var k=0; k<size; k++) {
var base = add(p[i], mul(x0, j), mul(x1, k));
drawPoly4(base, add(base,x0), add(base,x0,x1), add(base,x1),
colors[corners[view[f0]][getIndex(view[f0], f[i%5])][j][k]]);
}
}
// draw the edges
for (var j=0; j<size; j++) {
var base1 = add(p[i], mul(x1, size), mul(x0, j));
var base2 = add(p[(i+4)%5], mul(y0, size), mul(y1, j));
drawPoly4(base1, add(base1,x0), add(base2,y1), base2,
colors[edges[view[f0]][getIndex(view[f0], f[(i+4)%5])][j]]);
}
}
// draw the center
drawPoly5(add(p[0], mul(v[0], size), mul(v[1], size)),
add(p[1], mul(v[2], size), mul(v[3], size)),
add(p[2], mul(v[4], size), mul(v[5], size)),
add(p[3], mul(v[6], size), mul(v[7], size)),
add(p[4], mul(v[8], size), mul(v[9], size)), colors[view[f0]]);
}
function drawPoly4(v1, v2, v3, v4, color) {
c.strokeStyle = "#000";
c.fillStyle = color;
c.beginPath();
c.moveTo(v1[0], v1[1]);
c.lineTo(v2[0], v2[1]);
c.lineTo(v3[0], v3[1]);
c.lineTo(v4[0], v4[1]);
c.lineTo(v1[0], v1[1]);
c.closePath();
c.fill();
c.stroke();
}
function drawPoly5(v1, v2, v3, v4, v5, color) {
c.strokeStyle = "#000";
c.fillStyle = color;
c.beginPath();
c.moveTo(v1[0], v1[1]);
c.lineTo(v2[0], v2[1]);
c.lineTo(v3[0], v3[1]);
c.lineTo(v4[0], v4[1]);
c.lineTo(v5[0], v5[1]);
c.lineTo(v1[0], v1[1]);
c.closePath();
c.fill();
c.stroke();
}
function getIndex(face, other) {
for (var i=0; i<5; i++)
if (adjacency[face][i] == other) return i;
return -1;
}
function move(face, amount, layer, redraw) {
if (layer > size) layer = size;
for (var i=0; i<layer; i++) {
movelet(view[face], amount, i);
}
if (redraw) draw();
if (redraw && solving) {
cnt++;
startTimer();
}
}
function rotate(face, amount) {
for (var i=0; i<(5-amount); i++) {
var temp = view[adjacency[face][0]];
view[adjacency[face][0]] = view[adjacency[face][1]];
view[adjacency[face][1]] = view[adjacency[face][2]];
view[adjacency[face][2]] = view[adjacency[face][3]];
view[adjacency[face][3]] = view[adjacency[face][4]];
view[adjacency[face][4]] = temp;
temp = view[11 - adjacency[face][0]];
view[11 - adjacency[face][0]] = view[11 - adjacency[face][1]];
view[11 - adjacency[face][1]] = view[11 - adjacency[face][2]];
view[11 - adjacency[face][2]] = view[11 - adjacency[face][3]];
view[11 - adjacency[face][3]] = view[11 - adjacency[face][4]];
view[11 - adjacency[face][4]] = temp;
}
draw();
}
function movelet(face, amount, layer) {
// swap stickers
edgeSwap(amount,
[adjacency[face][0], getIndex(adjacency[face][0], face), layer],
[adjacency[face][1], getIndex(adjacency[face][1], face), layer],
[adjacency[face][2], getIndex(adjacency[face][2], face), layer],
[adjacency[face][3], getIndex(adjacency[face][3], face), layer],
[adjacency[face][4], getIndex(adjacency[face][4], face), layer]);
for (var j=0; j<size; j++) {
cornerSwap(amount,
[adjacency[face][0], getIndex(adjacency[face][0], face), j, layer],
[adjacency[face][1], getIndex(adjacency[face][1], face), j, layer],
[adjacency[face][2], getIndex(adjacency[face][2], face), j, layer],
[adjacency[face][3], getIndex(adjacency[face][3], face), j, layer],
[adjacency[face][4], getIndex(adjacency[face][4], face), j, layer]);
cornerSwap(amount,
[adjacency[face][0], getIndex(adjacency[face][0], adjacency[face][1]), layer, j],
[adjacency[face][1], getIndex(adjacency[face][1], adjacency[face][2]), layer, j],
[adjacency[face][2], getIndex(adjacency[face][2], adjacency[face][3]), layer, j],
[adjacency[face][3], getIndex(adjacency[face][3], adjacency[face][4]), layer, j],
[adjacency[face][4], getIndex(adjacency[face][4], adjacency[face][0]), layer, j]);
}
// turn face
if (layer == 0) {
for (var i=0; i<size; i++) {
edgeSwap(amount, [face,0,i], [face,1,i], [face,2,i], [face,3,i], [face,4,i]);
for (var j=0; j<size; j++) {
cornerSwap(amount, [face,0,i,j], [face,1,i,j], [face,2,i,j], [face,3,i,j], [face,4,i,j]);
}
}
}
}
function cornerSwap(amount, s1, s2, s3, s4, s5) {
for (var i=0; i<amount; i++) {
var temp = corners[s1[0]][s1[1]][s1[2]][s1[3]];
corners[s1[0]][s1[1]][s1[2]][s1[3]] = corners[s5[0]][s5[1]][s5[2]][s5[3]];
corners[s5[0]][s5[1]][s5[2]][s5[3]] = corners[s4[0]][s4[1]][s4[2]][s4[3]];
corners[s4[0]][s4[1]][s4[2]][s4[3]] = corners[s3[0]][s3[1]][s3[2]][s3[3]];
corners[s3[0]][s3[1]][s3[2]][s3[3]] = corners[s2[0]][s2[1]][s2[2]][s2[3]];
corners[s2[0]][s2[1]][s2[2]][s2[3]] = temp;
}
}
function edgeSwap(amount, s1, s2, s3, s4, s5) {
for (var i=0; i<amount; i++) {
var temp = edges[s1[0]][s1[1]][s1[2]];
edges[s1[0]][s1[1]][s1[2]] = edges[s5[0]][s5[1]][s5[2]];
edges[s5[0]][s5[1]][s5[2]] = edges[s4[0]][s4[1]][s4[2]];
edges[s4[0]][s4[1]][s4[2]] = edges[s3[0]][s3[1]][s3[2]];
edges[s3[0]][s3[1]][s3[2]] = edges[s2[0]][s2[1]][s2[2]];
edges[s2[0]][s2[1]][s2[2]] = temp;
}
}
function doKey(k, shift) {
// space to scramble
if (k == 32) {
l1 = 1;
l2 = 2;
r1 = 1;
r2 = 2;
showHands();
if (solving) {
if (isSolved()) {
stopTimer(true);
started = false;
solving = false;
}
} else {
scramble();
cnt = 0;
inspectionID = setTimeout(startTimer, 15000);
started = false;
solving = true;
}
}
//i k = R R'
else if (k == 73) move(FACE_RU, 1, r1, true);
else if (k == 75) move(FACE_RU, 4, r1, true);
//j f = U U'
else if (k == 74) move(FACE_U, 1, 1, true);
else if (k == 70) move(FACE_U, 4, 1, true);
//d e = L L'
else if (k == 68) move(FACE_LU, 1, l1, true);
else if (k == 69) move(FACE_LU, 4, l1, true);
//u m = r r'
else if (k == 85) move(FACE_RU, 1, r2, true);
else if (k == 77) move(FACE_RU, 4, r2, true);
//v r = l l'
else if (k == 86) move(FACE_LU, 1, l2, true);
else if (k == 82) move(FACE_LU, 4, l2, true);
//h g = F F'
else if (k == 72) move(FACE_F, 1, 1, true);
else if (k == 71) move(FACE_F, 4, 1, true);
//s l = D D'
else if (k == 83) move(FACE_RF, 1, 1, true);
else if (k == 76) move(FACE_RF, 4, 1, true);
//; a = [U] [U]'
else if (k == 59 || ((browser == "Chrome" || browser == "IE") && k == 186)) rotate(FACE_U, 1);
else if (k == 65) rotate(FACE_U, 4);
//w o = B B'
else if (k == 87) move(FACE_RB, 1, 1, true);
else if (k == 79) move(FACE_RB, 4, 1, true);
//y n = [R] [R]'
else if (k == 89) rotate(FACE_RU, 1, 1);
else if (k == 78) rotate(FACE_RU, 4, 1);
//t b = [L] [L]'
else if (k == 84) rotate(FACE_LU, 1, 1);
else if (k == 66) rotate(FACE_LU, 4, 1);
//p q = [F] [F]'
else if (k == 80) rotate(FACE_F, 1, 1);
else if (k == 81) rotate(FACE_F, 4, 1);
//+ - for cube size
else if (!shift && (k == 107 || ((browser == "Chrome" || browser == "IE") && k == 187))) {
stopTimer(false);
solving = false;
size++;
init();
clearTimes();
}
else if (!shift && size>1 && (k == 109 || ((browser == "Chrome" || browser == "IE") && k == 189))) {
stopTimer(false);
solving = false;
size--;
init();
clearTimes();
}
//shift + - for square size
else if (shift && (k == 107 || ((browser == "Chrome" || browser == "IE") && k == 187))) reSize(h+1);
else if (shift && (k == 109 || ((browser == "Chrome" || browser == "IE") && k == 189))) reSize(h-1);
//7 8 for Rin Rout
else if (k == 55) {
r2++;
if(!shift) r1++;
showHands();
}
else if (k == 56) {
if (shift && (r2-r1) > 1) r2--;
if (!shift && r1 > 1) {r2--; r1--;}
showHands();
}
//4 3 for Lin Lout
else if (k == 52) {
l2++;
if(!shift) l1++;
showHands();
}
else if (k == 51) {
if (shift && (l2-l1) > 1) l2--;
if (!shift && l1 > 1) {l2--; l1--;}
showHands();
}
//escape to reset
else if (k == 27) {
stopTimer(false);
if(solving) clearTimes();
solving = false;
started = false;
init();
}
}
function showHands() {
$('h').innerHTML = l1 + " " + l2 + " | " + r2 + " " + r1;
}
function isSolved() {
var isBadColor = false;
// Check if all stickers are the same on each face
for(var i=0; i<12; i++) {
for(var j=0; j<5; j++) {
for(var k=0; k<size; k++) {
for (var l=0; l<size; l++) {
if (corners[i][j][k][l] != i) isBadColor = true;
}
if (edges[i][j][k] != i) isBadColor = true;
}
}
}
return !isBadColor;
}
function getBrowser() {
// http://www.quirksmode.org/js/detect.html
var versionSearchString;
var dataBrowser = [
{string:navigator.userAgent, subString:"Chrome", identity:"Chrome"},
{string:navigator.userAgent, subString:"Safari", identity:"Chrome"},
{string:navigator.userAgent, subString:"Firefox", identity:"Firefox"},
{string:navigator.userAgent, subString:"MSIE", identity:"IE", versionSearch:"MSIE"}];
function searchString(data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
} else if (dataProp)
return data[i].identity;
}
};
return searchString(dataBrowser) || "An unknown browser";
}
function startTimer() {
clearTimeout(inspectionID);
if (!started) {
started = true;
startTime = new Date();
timerID = setInterval(updateTimer, 100);
}
}
function pretty(time) {
time = Math.round(time);
var mins = Math.floor(time/60000);
var secs = (time - 60000*mins)/1000;
if (mins == 0) {
return secs;
} else {
return mins + (secs<10?":0":":") + secs;
}
}
function updateTimer() {
curTime = new Date();
var time = curTime.getTime() - startTime.getTime();
$('t').innerHTML = pretty(time);
}
function stopTimer(good) {
if (started) {
started = false;
curTime = new Date();
var time = curTime.getTime() - startTime.getTime();
$('t').innerHTML = pretty(time) + (good ? "" : "*");
clearInterval(timerID);
if (good) { // store the time
times[times.length] = time;
if (times.length > 100) times = times.slice(times.length - 100);
// figure out averages and display
var v = "";
if (times.length >= 5) v += getAvg(5, times.slice(times.length - 5)) + "<br>";
if (times.length >= 12) v += getAvg(12, times.slice(times.length - 12)) + "<br>";
if (times.length >= 100) v += getAvg(100, times);
$('e').innerHTML = v;
$('h').innerHTML += " " + cnt + " @ " + Math.round(100000*cnt/time)/100;
}
}
}
function scramble() {
for (var i=0; i<300; i++)
move(Math.floor(Math.random()*12), Math.floor(Math.random()*4)+1, Math.floor(Math.random()*size)+1, false);
draw();
}
function getAvg(n, list) {
var max = 0;
var min = 0;
var sum = list[0];
for (var i=1; i<n; i++) {
if (list[i] > list[max]) max = i;
if (list[i] < list[min]) min = i;
sum += list[i];
}
sum = sum - list[min] - list[max];
var v = "";
for (var i=0; i<n; i++) {
if (i == min || i == max) {
v += "(" + pretty(list[i]) + ") ";
} else {
v += pretty(list[i]) + " ";
}
}
v += "=> " + pretty(sum/(n-2));
return v;
}
function clearTimes() {
times = [];
$('e').innerHTML = "";
}
// 2D vector arithmetic
function add(vec1, vec2, vec3) {
if (!vec3) {
return [vec1[0]+vec2[0], vec1[1]+vec2[1]];
} else {
return [vec1[0]+vec2[0]+vec3[0], vec1[1]+vec2[1]+vec3[1]];
}
}
function sub(vec1, vec2) {
return [vec1[0]-vec2[0], vec1[1]-vec2[1]];
}
function mul(vec, scal) {
return [vec[0]*scal, vec[1]*scal];
}
// aliases
function $(s){return document.getElementById(s);}
function sqrt(x){return Math.sqrt(x);}
// -->
</script>
</head>
<body bgColor="black" text="white" onload="init()">
<div height="1000" width="500"><canvas id="c" /></div>
<div id="t" style="font-size:200%"></div><br>
<div id="e"></div>
<div id="h">1 2 | 2 1</div>
</body>
</html>
On jflysim, how do you control the inner slices of bigger cubes (6x6x6 and 7x7x7)?
4/7 u/r
Put this in notepad and save it as something.html
I did that, and I'm assuming there is some other step, but I dunno what it is. T.T I don't mean to be stupid, it just happens sometimes.
Yay, it worked! Thanks to both of you!If it's what I think it is, go into open documents, then right click and click open in Internet Explorer or FireFox. Not sure though.
What exactly are mirrors?
http://en.wikipedia.org/wiki/MirrorsWhat exactly are mirrors?
Those aren't mirrorsHere's an example of one R U R' U' Mirrored L U L' U'
Here's an example of one R U R' U' Mirrored L U L' U'