aboutsummaryrefslogtreecommitdiff
path: root/challenge-202/roger-bell-west/lua/ch-2.lua
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-202/roger-bell-west/lua/ch-2.lua')
-rwxr-xr-xchallenge-202/roger-bell-west/lua/ch-2.lua103
1 files changed, 103 insertions, 0 deletions
diff --git a/challenge-202/roger-bell-west/lua/ch-2.lua b/challenge-202/roger-bell-west/lua/ch-2.lua
new file mode 100755
index 0000000000..830adac8d2
--- /dev/null
+++ b/challenge-202/roger-bell-west/lua/ch-2.lua
@@ -0,0 +1,103 @@
+#! /usr/bin/lua
+
+-- by Michael Anderson at
+-- https://stackoverflow.com/questions/8722620/comparing-two-index-tables-by-index-value-in-lua
+function recursive_compare(t1,t2)
+ if t1==t2 then return true end
+ if (type(t1)~="table") then return false end
+ local mt1 = getmetatable(t1)
+ local mt2 = getmetatable(t2)
+ if( not recursive_compare(mt1,mt2) ) then return false end
+ for k1,v1 in pairs(t1) do
+ local v2 = t2[k1]
+ if( not recursive_compare(v1,v2) ) then return false end
+ end
+ for k2,v2 in pairs(t2) do
+ local v1 = t1[k2]
+ if( not recursive_compare(v1,v2) ) then return false end
+ end
+ return true
+end
+
+function widestvalley(a)
+ local av = {}
+ local ac = {}
+ local l = -1
+ for i,v in ipairs(a) do
+ if v == l then
+ ac[#ac] = ac[#ac] + 1
+ else
+ table.insert(av, v)
+ table.insert(ac, 1)
+ l = v
+ end
+ end
+ local s = {}
+ local e = {}
+ local c = 1
+ for i,v in ipairs(av) do
+ local peak = false
+ if i == 1 or i == #av then
+ peak = true
+ end
+ if not peak then
+ if (av[i - 1] < v and v > av[i + 1]) then
+ peak = true
+ end
+ end
+ if peak then
+ table.insert(s, c)
+ table.insert(e, c + ac[i] - 1)
+ end
+ c = c + ac[i]
+ end
+ local out = {}
+ for i,v in ipairs(s) do
+ if i == #s then
+ break
+ end
+ if e[i + 1] - s[i] + 1 > #out then
+ out = {}
+ for j = s[i], e[i+1] do
+ table.insert(out, a[j])
+ end
+ end
+ end
+ return out
+end
+
+if recursive_compare(widestvalley({1, 5, 5, 2, 8}), {5, 5, 2, 8}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(widestvalley({2, 6, 8, 5}), {2, 6, 8}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(widestvalley({9, 8, 13, 13, 2, 2, 15, 17}), {13, 13, 2, 2, 15, 17}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(widestvalley({2, 1, 2, 1, 3}), {2, 1, 2}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+io.write(" ")
+
+if recursive_compare(widestvalley({1, 3, 3, 2, 1, 2, 3, 3, 2}), {3, 3, 2, 1, 2, 3, 3}) then
+ io.write("Pass")
+else
+ io.write("FAIL")
+end
+print("")
+