aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)