diff options
| author | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-11-05 14:51:24 -0800 |
|---|---|---|
| committer | Tyler Wardhaugh <tyler.wardhaugh@gmail.com> | 2020-11-06 16:11:02 -0800 |
| commit | 0e48f28c59973db242fb582595c59f7eadb89493 (patch) | |
| tree | 306917b9c4c84894ef10b378382215e3a74b7dc9 | |
| parent | c3dbe3a5ada81faffaff12f97b2c073012aa3778 (diff) | |
| download | perlweeklychallenge-club-0e48f28c59973db242fb582595c59f7eadb89493.tar.gz perlweeklychallenge-club-0e48f28c59973db242fb582595c59f7eadb89493.tar.bz2 perlweeklychallenge-club-0e48f28c59973db242fb582595c59f7eadb89493.zip | |
Ch85 (Lua): Task 1
| -rwxr-xr-x | challenge-085/tyler-wardhaugh/lua/ch-1.lua | 40 | ||||
| -rwxr-xr-x | challenge-085/tyler-wardhaugh/lua/run.lua | 9 | ||||
| -rwxr-xr-x | challenge-085/tyler-wardhaugh/lua/test.lua | 20 |
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) |
