diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-10-14 16:35:06 -0700 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-10-14 17:07:59 -0700 |
| commit | d597407285896782e8654f36f1c2f1bad2f7fdeb (patch) | |
| tree | 9301540d38533fe8dab2e8aa778aa68c3762c8a1 | |
| parent | b8eac8546d3665386c8959b39a2a34a30edbf1f1 (diff) | |
| download | perlweeklychallenge-club-d597407285896782e8654f36f1c2f1bad2f7fdeb.tar.gz perlweeklychallenge-club-d597407285896782e8654f36f1c2f1bad2f7fdeb.tar.bz2 perlweeklychallenge-club-d597407285896782e8654f36f1c2f1bad2f7fdeb.zip | |
Ch82 (Lua): Task 2
| -rwxr-xr-x | challenge-082/tyler-wardhaugh/lua/ch-2.lua | 30 | ||||
| -rwxr-xr-x | challenge-082/tyler-wardhaugh/lua/test.lua | 9 |
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) |
