Skip to content

Instantly share code, notes, and snippets.

@danielrw7
Created June 16, 2016 17:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielrw7/5f968939ffbe72bbf7b0c94084ba47b4 to your computer and use it in GitHub Desktop.
Save danielrw7/5f968939ffbe72bbf7b0c94084ba47b4 to your computer and use it in GitHub Desktop.
Encoding data into an order of a fixed number of array indexes
function getOptions(len) {
return Array(len).join().split(",").map(function(c, i) {
return i;
});
}
function getStep(i, len) {
return factorial(len) / len * i;
}
function to(order) {
var remainingOptions = getOptions(order.length);
var res = 0;
order.forEach(function(n, i) {
res += getStep(remainingOptions.indexOf(n), remainingOptions.length)
remainingOptions.splice(remainingOptions.indexOf(n),1)
});
return res;
}
function from(res, len) {
var remainingOptions = getOptions(len);
var arr = [];
for(var i = 0; i < len; i++) {
var step = getStep(1, remainingOptions.length);
var n = Math.floor(res/step);
arr.push(remainingOptions[n]);
remainingOptions.splice(remainingOptions.indexOf(remainingOptions[n]),1)
res -= n*step;
}
return arr;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment