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