aboutsummaryrefslogtreecommitdiff
path: root/challenge-096/abigail/lua
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-01-23 22:09:01 +0000
committerGitHub <noreply@github.com>2021-01-23 22:09:01 +0000
commitefa08f1c70928d4b4f59ee48b0014f88eca8ee89 (patch)
treea01fe9a6d4f517d19f3b54b1d85c543b38efd3b2 /challenge-096/abigail/lua
parentd233c279f0b2a12111925caeb4298f2884f3d5f1 (diff)
parent1c9975a4c79a02569f92310cf5e30ccd2b542033 (diff)
downloadperlweeklychallenge-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.lua12
-rwxr-xr-x[-rw-r--r--]challenge-096/abigail/lua/ch-2.lua35
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