@a-s8h/liblevenshtein
Version:
Various utilities regarding Levenshtein transducers.
64 lines (55 loc) • 1.64 kB
JavaScript
// Generated by CoffeeScript 1.7.1
(function() {
var concat, expand, global, permutations, swap,
__slice = [].slice;
concat = function() {
var concatenation, list, lists, _i, _len;
lists = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
concatenation = [];
for (_i = 0, _len = lists.length; _i < _len; _i++) {
list = lists[_i];
concatenation = concatenation.concat(list);
}
return concatenation;
};
expand = function(element, lists) {
var list, _i, _len;
for (_i = 0, _len = lists.length; _i < _len; _i++) {
list = lists[_i];
list.unshift(element);
}
return lists;
};
swap = function(list, i, j) {
var t;
t = list[i];
list[i] = list[j];
list[j] = t;
return list;
};
permutations = function(list, i) {
var j, l, offset, p, _i;
switch (list.length - i) {
case 0:
return [];
case 1:
return [[list[i]]];
case 2:
return [[list[i], list[i + 1]], [list[i + 1], list[i]]];
default:
p = [];
offset = list.length - i;
for (j = _i = 0; 0 <= offset ? _i < offset : _i > offset; j = 0 <= offset ? ++_i : --_i) {
l = list.slice();
swap(l, i, i + j);
p.push(expand(l[i], permutations(l, i + 1)));
}
return concat.apply(null, p);
}
};
global = typeof exports === 'object' ? exports : typeof window === 'object' ? window : this;
global['levenshtein'] || (global['levenshtein'] = {});
global['levenshtein']['permutations'] = function(list) {
return permutations(list, 0);
};
}).call(this);