aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-11-05 14:51:24 -0800
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-11-06 16:11:02 -0800
commit0e48f28c59973db242fb582595c59f7eadb89493 (patch)
tree306917b9c4c84894ef10b378382215e3a74b7dc9
parentc3dbe3a5ada81faffaff12f97b2c073012aa3778 (diff)
downloadperlweeklychallenge-club-0e48f28c59973db242fb582595c59f7eadb89493.tar.gz
perlweeklychallenge-club-0e48f28c59973db242fb582595c59f7eadb89493.tar.bz2
perlweeklychallenge-club-0e48f28c59973db242fb582595c59f7eadb89493.zip
Ch85 (Lua): Task 1
-rwxr-xr-xchallenge-085/tyler-wardhaugh/lua/ch-1.lua40
-rwxr-xr-xchallenge-085/tyler-wardhaugh/lua/run.lua9
-rwxr-xr-xchallenge-085/tyler-wardhaugh/lua/test.lua20
3 files changed, 69 insertions, 0 deletions
diff --git a/challenge-085/tyler-wardhaugh/lua/ch-1.lua b/challenge-085/tyler-wardhaugh/lua/ch-1.lua
new file mode 100755
index 0000000000..d6be13973d
--- /dev/null
+++ b/challenge-085/tyler-wardhaugh/lua/ch-1.lua
@@ -0,0 +1,40 @@
+#!/usr/bin/env lua
+
+local t1 = {}
+
+function t1.find_triplet_sum(coll)
+ local lower = 1
+ local upper = 2
+ local num_elems = 3
+
+ -- filter out any value more than the upper bound and limit repeated values
+ -- to the number of elements we sum (3)
+ local seen = {}
+ local tbl = {}
+ for _, v in ipairs(coll) do
+ seen[v] = 1 + (seen[v] or 0)
+ if (v < upper) and (seen[v] <= num_elems) then table.insert(tbl, v) end
+ end
+
+ local sum
+ for i = 1,#tbl - 2 do
+ for j = i+1,#tbl - 1 do
+ for k = j+1,#tbl do
+ sum = tbl[i] + tbl[j] + tbl[k]
+ if (lower < sum) and (sum < upper) then
+ return 1
+ end
+ end
+ end
+ end
+
+ return 0
+end
+
+function t1.run(args)
+ local coll = {}
+ for _, v in ipairs(args) do table.insert(coll, tonumber(v)) end
+ print(t1.find_triplet_sum(coll))
+end
+
+return t1
diff --git a/challenge-085/tyler-wardhaugh/lua/run.lua b/challenge-085/tyler-wardhaugh/lua/run.lua
new file mode 100755
index 0000000000..c6e7473bee
--- /dev/null
+++ b/challenge-085/tyler-wardhaugh/lua/run.lua
@@ -0,0 +1,9 @@
+#!/usr/bin/env lua
+
+local filename = arg[1]
+local run_args = table.move(arg, 2, #arg, 1, {})
+
+io.write(string.format("Running task from '%s' with {%s}:\n",
+ filename, table.concat(run_args, ", ")))
+
+require(filename).run(run_args)
diff --git a/challenge-085/tyler-wardhaugh/lua/test.lua b/challenge-085/tyler-wardhaugh/lua/test.lua
new file mode 100755
index 0000000000..4577757e03
--- /dev/null
+++ b/challenge-085/tyler-wardhaugh/lua/test.lua
@@ -0,0 +1,20 @@
+#!/usr/bin/env lua
+
+require 'busted.runner'()
+
+describe("Task 1, Triplet Sum", function()
+ local t1 = require'ch-1'
+ it("produces correct results for the examples", function()
+ assert.are.same(1, t1.find_triplet_sum({1.2, 0.4, 0.1, 2.5}))
+ assert.are.same(0, t1.find_triplet_sum({0.2, 1.5, 0.9, 1.1}))
+ assert.are.same(1, t1.find_triplet_sum({0.5, 1.1, 0.3, 0.7}))
+
+ assert.are.same(0, t1.find_triplet_sum({0, 0.5, 0.5}))
+ assert.are.same(0, t1.find_triplet_sum({0.1, 0.2, 0.3}))
+ assert.are.same(0, t1.find_triplet_sum({1.1, 0.1}))
+
+ local big = {0.9, 0.8, 0.05}
+ for _ = 1,100 do table.insert(big, math.random(2, 1000)) end
+ assert.are.same(1, t1.find_triplet_sum(big))
+ end)
+end)