Permutation & Combination

by jinwolf

HTML

<div>
    <span class="label">Letters:</span><input id="letters" type="text"  value="abc" />
</div>
<div>
    <span class="label">Word Length:</span><input id="wordLength" type="text" value="2"/>
</div>
<div>
<input id="getWordsButton" type="button" value="Get Words" />
</div>
<ul id="result"></ul>

CSS

span.label {
  width: 100px;
  float: left;
  text-align:right;
  padding-right:10px;
}

JavaScript

var permutate = (function() {
    
    var results = [];    
    
    function doPermute(input, output, used, size, level) {        
            
        if (size == level) {
            var word = output.join('');
            results.push(word);
            return;
        } 
        
        level++;
        
        for (var i = 0; i < input.length; i++) {
            
            if (used[i] === true) {
                continue;
            }            
            
            used[i] = true;

            output.push(input[i]);
            
            doPermute(input, output, used, size, level);
            
            used[i] = false;
            
            output.pop();
        }
    }
    
    return {
        getPermutations: function(input, size) {
            
            var chars = input.split('');
            var output = [];
            var used = new Array(chars.length);      

            doPermute(chars, output, used, size, 0);        

            return results;    
        }
    }
})();

$('#getWordsButton').click(function() {
  var letters = $('#letters').val();
  var size = parseInt($('#wordLength').val());
  $('ul#result').empty();  
    var testResults = permutate.getPermutations(letters, size);
    
    $.each(testResults, function(index, item) {        
        $('ul#result').append("<li>" + item + "</li>");
    });
});