aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-10-20 12:36:44 -0700
committerTyler Wardhaugh <tyler.wardhaugh@gmail.com>2020-10-22 00:17:51 -0700
commit392152e581a9176e9013e786b2d8f94e0ebb3b57 (patch)
tree574c0b23503bfa8ea3cd7ff18d68361d664893da
parent920558f8349af8c94676f68b5f9ca2b38574c23f (diff)
downloadperlweeklychallenge-club-392152e581a9176e9013e786b2d8f94e0ebb3b57.tar.gz
perlweeklychallenge-club-392152e581a9176e9013e786b2d8f94e0ebb3b57.tar.bz2
perlweeklychallenge-club-392152e581a9176e9013e786b2d8f94e0ebb3b57.zip
Ch83 (Lua): Task 2
-rwxr-xr-xchallenge-083/tyler-wardhaugh/lua/ch-2.lua34
-rwxr-xr-xchallenge-083/tyler-wardhaugh/lua/test.lua8
2 files changed, 42 insertions, 0 deletions
diff --git a/challenge-083/tyler-wardhaugh/lua/ch-2.lua b/challenge-083/tyler-wardhaugh/lua/ch-2.lua
new file mode 100755
index 0000000000..bf900a864e
--- /dev/null
+++ b/challenge-083/tyler-wardhaugh/lua/ch-2.lua
@@ -0,0 +1,34 @@
+#!/usr/bin/env lua
+
+local t2 = {}
+
+function t2.flip_array(coll)
+ local min_flips = math.maxinteger
+ local min_sum = math.maxinteger
+ local max_bits = 2^#coll - 1
+
+ local cur_num, cur_sum, is_neg
+ for bits = 1, max_bits do
+ cur_num, cur_sum, is_neg = 0, 0, 0
+ for i, v in ipairs(coll) do
+ is_neg = bits & 2^(i-1) == 0
+ cur_num = cur_num + (is_neg and 1 or 0)
+ cur_sum = cur_sum + v * (is_neg and -1 or 1)
+ end
+
+ if 0 <= cur_sum and cur_sum <= min_sum then
+ min_flips = math.min(cur_num, min_flips)
+ min_sum = cur_sum
+ end
+ end
+
+ return min_flips
+end
+
+
+function t2.run(args)
+ local minimum = t2.flip_array(args)
+ print(minimum)
+end
+
+return t2
diff --git a/challenge-083/tyler-wardhaugh/lua/test.lua b/challenge-083/tyler-wardhaugh/lua/test.lua
index 731b0807b9..7fa7effa5f 100755
--- a/challenge-083/tyler-wardhaugh/lua/test.lua
+++ b/challenge-083/tyler-wardhaugh/lua/test.lua
@@ -10,3 +10,11 @@ describe("Task 1, Words Length", function()
assert.are.same(t1.inner_words_length"Zero when-no-inner-words-exist!", 0)
end)
end)
+
+describe("Task 2, Flip Array", function()
+ local t2 = require'ch-2'
+ it("produces correct results for the examples", function()
+ assert.are.same(t2.flip_array({3, 10, 8}), 1)
+ assert.are.same(t2.flip_array({12, 2, 10}), 1)
+ end)
+end)