UNPKG

@a-s8h/liblevenshtein

Version:

Various utilities regarding Levenshtein transducers.

47 lines (41 loc) 910 B
concat = (lists...) -> concatenation = [] for list in lists concatenation = concatenation.concat(list) concatenation expand = (element, lists) -> list.unshift(element) for list in lists lists swap = (list, i, j) -> t = list[i] list[i] = list[j] list[j] = t list permutations = (list, i) -> switch list.length - i when 0 [] when 1 [[list[i]]] when 2 [ [list[i], list[i + 1]] [list[i + 1], list[i]] ] else p = [] offset = list.length - i for j in [0...offset] l = list.slice() swap(l, i, i + j) p.push(expand(l[i], permutations(l, i + 1))) concat.apply(null, p) global = if typeof exports is 'object' exports else if typeof window is 'object' window else this global['levenshtein'] ||= {} global['levenshtein']['permutations'] = (list) -> permutations(list, 0)