Status
Not open for further replies.
qqtimer, cubemania, down load primsa or cct just to name a few offline timers are better since they save the data to the hardrive and not the cookies and if you don't have internet for a while or something you can still time yourself
 
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
 
Last edited:
Here is the breakdown for my 4x4 solves.
Centers
16.61 18.61 20.31 19.17 16.63 18.23 18.67 18.84 15.49 18.25 22.15 12.69
Average:17.97
Edge Pairing
41.980, 40.014, 44.710, 40.638, 44.071, 40.216, 47.393, 32.199, 41.387, 44.086, 45.552, 29.328
Average: 40.965
3x3
35.896, 33.836, 22.526, 38.470, 39.999, 24.804, 29.718, 31.902, 26.504, 30.201, 30.778, 25.241
Average: 30.823
Total: 1:29.758
What do I need to work on the most and how should I approach working on it? I've been practicing alot and done hundreds of solves but it's very dissapointing because I'm not improving. Thanks in advance.
 
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

Put this in notepad and save it as something.html

Code:
<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 += " &nbsp; " + 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>
 
Status
Not open for further replies.
Back
Top