aboutsummaryrefslogtreecommitdiff
path: root/challenge-081/tyler-wardhaugh/lua/ch-1.lua
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-081/tyler-wardhaugh/lua/ch-1.lua')
-rwxr-xr-xchallenge-081/tyler-wardhaugh/lua/ch-1.lua42
1 files changed, 42 insertions, 0 deletions
diff --git a/challenge-081/tyler-wardhaugh/lua/ch-1.lua b/challenge-081/tyler-wardhaugh/lua/ch-1.lua
new file mode 100755
index 0000000000..8203f05c74
--- /dev/null
+++ b/challenge-081/tyler-wardhaugh/lua/ch-1.lua
@@ -0,0 +1,42 @@
+#!/usr/bin/env lua
+
+local t1 = {}
+
+do
+ local lpeg = require'lpeg'
+ local P = lpeg.P
+ function t1.make_pat(s)
+ return P(s)
+ end
+end
+
+function t1.common_base_string(s1, s2)
+ -- ensure s1 is smaller or equal in length to s2
+ if s1:len() > s2:len() then
+ s1, s2 = s2, s1
+ end
+
+ local s2_len = s2:len()
+ local results, substring, part = {}
+ for i = 1,s2_len do
+ -- skip attempt if s2's length not evenly divisible by i
+ if s2_len % i ~= 0 then goto continue end
+
+ substring = s2:sub(1, s2_len // i)
+ part = t1.make_pat(substring)
+ if (part^i):match(s2) and (part^1 * -1):match(s1) then
+ table.insert(results, substring)
+ end
+ ::continue::
+ end
+
+ return results
+end
+
+function t1.run(args)
+ local S1, S2 = table.unpack(args, 1, 2)
+ local bases = t1.common_base_string(S1, S2)
+ print(table.concat(bases, " "))
+end
+
+return t1