diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-01-23 22:09:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-23 22:09:01 +0000 |
| commit | efa08f1c70928d4b4f59ee48b0014f88eca8ee89 (patch) | |
| tree | a01fe9a6d4f517d19f3b54b1d85c543b38efd3b2 /challenge-096/abigail/lua | |
| parent | d233c279f0b2a12111925caeb4298f2884f3d5f1 (diff) | |
| parent | 1c9975a4c79a02569f92310cf5e30ccd2b542033 (diff) | |
| download | perlweeklychallenge-club-efa08f1c70928d4b4f59ee48b0014f88eca8ee89.tar.gz perlweeklychallenge-club-efa08f1c70928d4b4f59ee48b0014f88eca8ee89.tar.bz2 perlweeklychallenge-club-efa08f1c70928d4b4f59ee48b0014f88eca8ee89.zip | |
Merge pull request #3357 from Abigail/abigail/week-096
Abigail/week 096
Diffstat (limited to 'challenge-096/abigail/lua')
| -rwxr-xr-x[-rw-r--r--] | challenge-096/abigail/lua/ch-1.lua | 12 | ||||
| -rwxr-xr-x[-rw-r--r--] | challenge-096/abigail/lua/ch-2.lua | 35 |
2 files changed, 31 insertions, 16 deletions
diff --git a/challenge-096/abigail/lua/ch-1.lua b/challenge-096/abigail/lua/ch-1.lua index 9c4b1de913..c2de0434f6 100644..100755 --- a/challenge-096/abigail/lua/ch-1.lua +++ b/challenge-096/abigail/lua/ch-1.lua @@ -1,9 +1,19 @@ +#!/opt/local/bin/lua + +-- +-- See ../README.md +-- + +-- +-- Run as: lua ch-1.lua < input-file +-- + for line in io . lines () do -- -- Extract words and put them into an array, in reverse. -- local words = {} - for str in string . gmatch (line, "[^ ]+") do + for str in string . gmatch (line, "[^%s]+") do table . insert (words, 1, str) end diff --git a/challenge-096/abigail/lua/ch-2.lua b/challenge-096/abigail/lua/ch-2.lua index 162f06eef0..99058213ca 100644..100755 --- a/challenge-096/abigail/lua/ch-2.lua +++ b/challenge-096/abigail/lua/ch-2.lua @@ -1,3 +1,13 @@ +#!/opt/local/bin/lua + +-- +-- See ../README.md +-- + +-- +-- Run as: lua ch-2.lua < input-file +-- + -- -- This is an implementation of the Wagner Fischer algorithm, which -- calculates the Levenshtein distance. @@ -7,18 +17,13 @@ function LevenshteinDistance (first, second) local n = first : len () local m = second : len () - if n < m - then - first, second = second, first - n, m = m, n - end - distances = {} + distance = {} for i = 0, n do - distances [i] = {} + distance [i] = {} for j = 0, m do if i == 0 or j == 0 then - distances [i] [j] = i + j + distance [i] [j] = i + j else local cost = 1 if string . sub (first, i, i) == @@ -26,10 +31,10 @@ function LevenshteinDistance (first, second) then cost = 0 end - distances [i] [j] = math . min ( - distances [i - 1] [j] + 1, - distances [i] [j - 1] + 1, - distances [i - 1] [j - 1] + cost + distance [i] [j] = math . min ( + distance [i - 1] [j] + 1, + distance [i] [j - 1] + 1, + distance [i - 1] [j - 1] + cost ) end end @@ -37,14 +42,14 @@ function LevenshteinDistance (first, second) -- -- We only need the previous row, so we can return the -- memory of rows before that. This reduces the memory - -- usage from O (n * m) to O (min (n, m)) + -- usage from Theta (n * m) to O (n + m) -- if i > 0 then - distances [i - 1] = nil + distance [i - 1] = nil end end - return distances [n] [m] + return distance [n] [m] end |
