Created
August 12, 2011 03:58
-
-
Save Gurpartap/1141421 to your computer and use it in GitHub Desktop.
Generate unique alphanumeric incrementing string keys
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var symbols = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split(''); | |
var max_length = symbols.length; | |
for (var length = 1; length <= max_length; length++) { | |
var scombos = combinations(symbols, length); | |
for (var j = 0; j < scombos.length; j++) { | |
var word = scombos[j]; | |
console.log(word.join('')); | |
} | |
} | |
function combinations(superset, size) { | |
var result = []; | |
if (superset.length < size) {return result;} | |
var done = false; | |
var current_combo, distance_back, new_last_index; | |
var indexes = []; | |
var indexes_last = size - 1; | |
var superset_last = superset.length - 1; | |
// initialize indexes to start with leftmost combo | |
for (var i = 0; i < size; ++i) { | |
indexes[i] = i; | |
} | |
while (!done) { | |
current_combo = []; | |
for (i = 0; i < size; ++i) { | |
current_combo.push(superset[indexes[i]]); | |
} | |
result.push(current_combo); | |
if (indexes[indexes_last] == superset_last) { | |
done = true; | |
for (i = indexes_last - 1; i > -1 ; --i) { | |
distance_back = indexes_last - i; | |
new_last_index = indexes[indexes_last - distance_back] + distance_back + 1; | |
if (new_last_index <= superset_last) { | |
indexes[indexes_last] = new_last_index; | |
done = false; | |
break; | |
} | |
} | |
if (!done) { | |
++indexes[indexes_last - distance_back]; | |
--distance_back; | |
for (; distance_back; --distance_back) { | |
indexes[indexes_last - distance_back] = indexes[indexes_last - distance_back - 1] + 1; | |
} | |
} | |
} | |
else {++indexes[indexes_last]} | |
} | |
return result; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment