aboutsummaryrefslogtreecommitdiff
path: root/challenge-092
diff options
context:
space:
mode:
authorchirvasitua <chirvasitua@gmail.com>2021-07-14 19:15:05 -0400
committerchirvasitua <chirvasitua@gmail.com>2021-07-14 19:15:05 -0400
commitfb917197accdff538b361b976401d797afab16ca (patch)
treee5e4682d3bcddf968cea2d7130a2a8fddb666ce3 /challenge-092
parent262314e6f2e38d22bf756d8edac7fbcc5af52e25 (diff)
downloadperlweeklychallenge-club-fb917197accdff538b361b976401d797afab16ca.tar.gz
perlweeklychallenge-club-fb917197accdff538b361b976401d797afab16ca.tar.bz2
perlweeklychallenge-club-fb917197accdff538b361b976401d797afab16ca.zip
1st commit on 092_lua
Diffstat (limited to 'challenge-092')
-rwxr-xr-xchallenge-092/stuart-little/lua/ch-1.lua14
-rwxr-xr-xchallenge-092/stuart-little/lua/ch-2.lua36
2 files changed, 50 insertions, 0 deletions
diff --git a/challenge-092/stuart-little/lua/ch-1.lua b/challenge-092/stuart-little/lua/ch-1.lua
new file mode 100755
index 0000000000..4e7c0e1a28
--- /dev/null
+++ b/challenge-092/stuart-little/lua/ch-1.lua
@@ -0,0 +1,14 @@
+#!/usr/bin/env lua
+
+-- run <script> <space-separated strings>
+
+function oneWay(s1,s2)
+ local t={}
+ for i=1,s1:len() do
+ if i>s2:len() then return false end
+ if not t[s1:sub(i,i)] then t[s1:sub(i,i)] = s2:sub(i,i) end
+ end
+ return s2 == s1:gsub(".",t)
+end
+
+print(oneWay(arg[1],arg[2]) and oneWay(arg[2],arg[1]) and 1 or 0)
diff --git a/challenge-092/stuart-little/lua/ch-2.lua b/challenge-092/stuart-little/lua/ch-2.lua
new file mode 100755
index 0000000000..4f100e87ef
--- /dev/null
+++ b/challenge-092/stuart-little/lua/ch-2.lua
@@ -0,0 +1,36 @@
+#!/usr/bin/env lua
+
+--[[
+run <script> <initial ordered intervals followed by extra interval>
+
+each interval should be entered as <left> <space> <right>, with spaces between the individual intervals
+
+e.g. <script> 1 4 8 10 2 6
+--]]
+
+function lt(t1,t2)
+ return t1 and t2 and t1[2] < t2[1]
+end
+
+function overlap(t1,t2)
+ return t1 and t2 and t1[2] >= t2[1] and t2[2] >= t1[1]
+end
+
+function mergeOver(t1,t2)
+ return {math.min(t1[1],t2[1]),math.max(t1[2],t2[2])}
+end
+
+local ints={}
+while #arg>0 do
+ table.insert(ints,{tonumber(table.remove(arg,1)),tonumber(table.remove(arg,1))})
+end
+extra=table.remove(ints)
+
+local i=1
+while lt(ints[i],extra) do i=i+1 end
+while overlap(ints[i],extra) do
+ local t=table.remove(ints,i)
+ extra=mergeOver(extra,t)
+end
+table.insert(ints,i,extra)
+for _,t in ipairs(ints) do print(table.unpack(t)) end