From 3282b099dcb30ad58ffae21953a0b70cf1a6c02d Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Mon, 19 Oct 2020 15:27:48 -0700 Subject: Ch83: prep for challenge --- challenge-083/tyler-wardhaugh/lua/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'challenge-083/tyler-wardhaugh/lua') diff --git a/challenge-083/tyler-wardhaugh/lua/README.md b/challenge-083/tyler-wardhaugh/lua/README.md index 8247d79487..35e8606521 100644 --- a/challenge-083/tyler-wardhaugh/lua/README.md +++ b/challenge-083/tyler-wardhaugh/lua/README.md @@ -1,17 +1,17 @@ # The Weekly Challenge -The Weekly Challenge - #081 - Tyler Wardhaugh +The Weekly Challenge - #083 - Tyler Wardhaugh ## Usage Run Task 1: - $ ./run.lua ch-1 M N + $ ./run.lua ch-1 S Run Task 2: - $ ./run.lua ch-2 A B C + $ ./run.lua ch-2 A1 A2 A3... Run the project's tests (all the samples from the task descriptions plus some others): -- cgit From 920558f8349af8c94676f68b5f9ca2b38574c23f Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Tue, 20 Oct 2020 11:30:35 -0700 Subject: Ch83 (Lua): Task 1 --- challenge-083/tyler-wardhaugh/lua/ch-1.lua | 20 ++++++++++++++++++++ challenge-083/tyler-wardhaugh/lua/run.lua | 9 +++++++++ challenge-083/tyler-wardhaugh/lua/test.lua | 12 ++++++++++++ 3 files changed, 41 insertions(+) create mode 100755 challenge-083/tyler-wardhaugh/lua/ch-1.lua create mode 100755 challenge-083/tyler-wardhaugh/lua/run.lua create mode 100755 challenge-083/tyler-wardhaugh/lua/test.lua (limited to 'challenge-083/tyler-wardhaugh/lua') diff --git a/challenge-083/tyler-wardhaugh/lua/ch-1.lua b/challenge-083/tyler-wardhaugh/lua/ch-1.lua new file mode 100755 index 0000000000..cb4f35d915 --- /dev/null +++ b/challenge-083/tyler-wardhaugh/lua/ch-1.lua @@ -0,0 +1,20 @@ +#!/usr/bin/env lua + +local t1 = {} + +function t1.inner_words_length(s) + local inner = s:match("^%S+%s+%f[%S](.*)%f[%s]%s+%S+$") + if inner then + return inner:gsub("%s+", ""):len() + else + return 0 + end +end + +function t1.run(args) + local s = args[1] + local len = t1.inner_words_length(s) + print(len) +end + +return t1 diff --git a/challenge-083/tyler-wardhaugh/lua/run.lua b/challenge-083/tyler-wardhaugh/lua/run.lua new file mode 100755 index 0000000000..c6e7473bee --- /dev/null +++ b/challenge-083/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-083/tyler-wardhaugh/lua/test.lua b/challenge-083/tyler-wardhaugh/lua/test.lua new file mode 100755 index 0000000000..731b0807b9 --- /dev/null +++ b/challenge-083/tyler-wardhaugh/lua/test.lua @@ -0,0 +1,12 @@ +#!/usr/bin/env lua + +require 'busted.runner'() + +describe("Task 1, Words Length", function() + local t1 = require'ch-1' + it("produces correct results for the examples", function() + assert.are.same(t1.inner_words_length"The Weekly Challenge", 6) + assert.are.same(t1.inner_words_length"The purpose of our lives is to be happy", 23) + assert.are.same(t1.inner_words_length"Zero when-no-inner-words-exist!", 0) + end) +end) -- cgit From 392152e581a9176e9013e786b2d8f94e0ebb3b57 Mon Sep 17 00:00:00 2001 From: Tyler Wardhaugh Date: Tue, 20 Oct 2020 12:36:44 -0700 Subject: Ch83 (Lua): Task 2 --- challenge-083/tyler-wardhaugh/lua/ch-2.lua | 34 ++++++++++++++++++++++++++++++ challenge-083/tyler-wardhaugh/lua/test.lua | 8 +++++++ 2 files changed, 42 insertions(+) create mode 100755 challenge-083/tyler-wardhaugh/lua/ch-2.lua (limited to 'challenge-083/tyler-wardhaugh/lua') 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) -- cgit