aboutsummaryrefslogtreecommitdiff
path: root/challenge-050/stuart-little/lua/ch-1.lua
blob: d6a39b9190fd567a1e6980923fd7e99c04a22614 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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