summary refs log tree commit diff stats
path: root/tests/misc/tstrdist.nim
blob: 3e1939e737bd2fd64207b4a1fbd5e46259b8b7f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# compute the edit distance between two strings

proc editDistance(a, b: string): int =
  var
    c: seq[int]
    n = a.len
    m = b.len
  newSeq(c, (n+1)*(m+1))
  for i in 0..n:
    c[i*n] = i # [i,0]
  for j in 0..m:
    c[j] = j # [0,j]

  for i in 1..n:
    for j in 1..m:
      var x = c[(i-1)*n + j]+1
      var y = c[i*n + j-1]+1
      var z: int
      if a[i-1] == b[j-1]:
        z = c[(i-1)*n + j-1]
      else:
        z = c[(i-1)*n + j-1]+1
      c[(i-1)*n + (j-1)] = min(x,min(y,z))
  return c[n*m]

write(stdout, editDistance("abc", "abd"))
"> -- {} \; doc: cleandoc mkdir -p $(DOCDIR) cd $(DOCDIR); \ $(PYTHON) -c 'import pydoc, sys; \ sys.path[0] = "$(CWD)"; \ pydoc.writedocs("$(CWD)")' find . -name \*.html -exec sed -i 's|'$(CWD)'|../..|g' -- {} \; man: pod2man --stderr --center='ranger manual' --date='$(NAME)-$(VERSION)' \ --release=$(shell date +%x) doc/ranger.pod doc/ranger.1 manhtml: pod2html doc/ranger.pod --outfile=doc/ranger.1.html cleandoc: test -d $(DOCDIR) && rm -f -- $(DOCDIR)/*.html || true snapshot: git archive --prefix='$(NAME)-$(VERSION)/' --format=tar HEAD | gzip > $(SNAPSHOT_NAME) .PHONY: default options compile clean doc cleandoc snapshot install man