aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-10-14 16:35:06 -0700
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-10-14 17:07:59 -0700
commitd597407285896782e8654f36f1c2f1bad2f7fdeb (patch)
tree9301540d38533fe8dab2e8aa778aa68c3762c8a1
parentb8eac8546d3665386c8959b39a2a34a30edbf1f1 (diff)
downloadperlweeklychallenge-club-d597407285896782e8654f36f1c2f1bad2f7fdeb.tar.gz
perlweeklychallenge-club-d597407285896782e8654f36f1c2f1bad2f7fdeb.tar.bz2
perlweeklychallenge-club-d597407285896782e8654f36f1c2f1bad2f7fdeb.zip
Ch82 (Lua): Task 2
-rwxr-xr-xchallenge-082/tyler-wardhaugh/lua/ch-2.lua30
-rwxr-xr-xchallenge-082/tyler-wardhaugh/lua/test.lua9
2 files changed, 39 insertions, 0 deletions
diff --git a/challenge-082/tyler-wardhaugh/lua/ch-2.lua b/challenge-082/tyler-wardhaugh/lua/ch-2.lua
new file mode 100755
index 0000000000..b92e26bffd
--- /dev/null
+++ b/challenge-082/tyler-wardhaugh/lua/ch-2.lua
@@ -0,0 +1,30 @@
+#!/usr/bin/env lua
+
+local t2 = {}
+
+function t2.interleave_string(a, b, c)
+ if a:len() == 0 then return b == c end
+ if b:len() == 0 then return a == c end
+ if c:len() ~= a:len() + b:len() then return end
+
+ -- get heads (1st char) and tails (the rest)
+ local ah, at = a:match("^(%a)(%a*)$")
+ local bh, bt = b:match("^(%a)(%a*)$")
+ local ch, ct = c:match("^(%a)(%a*)$")
+
+ return ((ah == ch) and t2.interleave_string(at, b, ct))
+ or ((bh == ch) and t2.interleave_string(a, bt, ct))
+end
+
+function t2.run(args)
+ if #args ~= 3 then
+ io.stderr:write("error: must supply three strings\n")
+ os.exit(2)
+ end
+
+ local a, b, c = table.unpack(args, 1, 3)
+ local result = t2.interleave_string(a, b, c)
+ if result then print(1) else print(0) end
+end
+
+return t2
diff --git a/challenge-082/tyler-wardhaugh/lua/test.lua b/challenge-082/tyler-wardhaugh/lua/test.lua
index 23b3a4e063..20f0d33d27 100755
--- a/challenge-082/tyler-wardhaugh/lua/test.lua
+++ b/challenge-082/tyler-wardhaugh/lua/test.lua
@@ -9,3 +9,12 @@ describe("Task 1, Common Factors", function()
assert.are.same(t1.common_factors(18, 23), {1})
end)
end)
+
+describe("Task 2, Interleave Strings", function()
+ local t2 = require'ch-2'
+ it("produces correct results for the examples", function()
+ assert.are.same(t2.interleave_string("XY", "X", "XXY"), true)
+ assert.are.same(t2.interleave_string("XXY", "XXZ", "XXXXZY"), true)
+ assert.are.same(t2.interleave_string("YX", "X", "XXY"), false)
+ end)
+end)