aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-050/stuart-little/lua/ch-1.lua41
-rwxr-xr-xchallenge-050/stuart-little/lua/ch-2.lua12
2 files changed, 53 insertions, 0 deletions
diff --git a/challenge-050/stuart-little/lua/ch-1.lua b/challenge-050/stuart-little/lua/ch-1.lua
new file mode 100755
index 0000000000..d6a39b9190
--- /dev/null
+++ b/challenge-050/stuart-little/lua/ch-1.lua
@@ -0,0 +1,41 @@
+#!/usr/bin/env lua
+
+-- run <script> <interval1-left interval1-right interval2-left interval2-right ...>
+
+function overlap(t1,t2)
+ return (t1[1]-t2[2])*(t1[2]-t2[1]) <= 0
+end
+
+function merge(t1,t2)
+ return {math.min(t1[1],t2[1]), math.max(t1[2],t2[2])}
+end
+
+function squash(t)
+ for i=1,#t-1 do
+ for j=i+1,#t do
+ if overlap(t[i],t[j]) then
+ t[j] = merge(t[i],t[j])
+ t[i]="*"
+ goto continue
+ end
+ end
+ ::continue::
+ end
+ for i=#t,1,-1 do
+ if type(t[i]) ~= 'table' then table.remove(t,i) end
+ end
+ return t
+end
+
+local ints={}
+local run={}
+for k,v in ipairs(arg) do
+ table.insert(run,tonumber(v))
+ if (k%2==0) then
+ table.insert(ints,run)
+ run={}
+ end
+end
+for _,v in ipairs(squash(ints)) do
+ print(("[%s, %s]"):format(v[1],v[2]))
+end
diff --git a/challenge-050/stuart-little/lua/ch-2.lua b/challenge-050/stuart-little/lua/ch-2.lua
new file mode 100755
index 0000000000..3173bfbbf8
--- /dev/null
+++ b/challenge-050/stuart-little/lua/ch-2.lua
@@ -0,0 +1,12 @@
+#!/usr/bin/env lua
+
+-- run <script> <space-separated numbers>
+
+local inpt={}
+for _,v in ipairs(arg) do
+ table.insert(inpt,tonumber(v))
+end
+table.sort(inpt)
+for k,v in ipairs(inpt) do
+ if v==#inpt-k and (k==#inpt or inpt[k+1]>v) then print(v) end
+end