blob: b7ea2a3f6b4a05a62459abd9f60b50e591ce7475 (
plain)
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
27
28
29
30
31
32
33
34
35
36
37
|
#!/usr/bin/ruby
#
# See ../README.md
#
#
# Run as: ruby ch-2.rb < input-file
#
def LevenshteinDistance (first, second)
n = first . length
m = second . length
distance = []
for i in 0 .. n do
distance [i] = []
for j in 0 .. m do
distance [i] [j] = i == 0 || j == 0 ? i + j
: [distance [i - 1] [j] + 1,
distance [i] [j - 1] + 1,
distance [i - 1] [j - 1] +
(first [i - 1] == second [j - 1] ? 0 : 1)] . min
end
#
# Release memory
#
if i > 1
distance [i - 1] = nil
end
end
return distance [n] [m]
end
ARGF . each_line do |_|
words = (_ . split (/\s+/)) . grep (/\S/)
puts (LevenshteinDistance words [0], words [1])
end
|