UNPKG

@a-s8h/liblevenshtein

Version:

Various utilities regarding Levenshtein transducers.

64 lines (55 loc) 1.64 kB
// 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);