diff options
| author | Roger Bell_West <roger@firedrake.org> | 2023-05-29 10:00:17 +0100 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2023-05-29 10:00:17 +0100 |
| commit | 66cfec5ab3b80c0bf4f3e3229f3eecf88840734d (patch) | |
| tree | f8483e0acc157ffbd96bc29d7afeb5bd7bc8f979 /challenge-219/roger-bell-west/lua/ch-2.lua | |
| parent | 979144e452a65703e7845a166d7c94ba6f89e37f (diff) | |
| download | perlweeklychallenge-club-66cfec5ab3b80c0bf4f3e3229f3eecf88840734d.tar.gz perlweeklychallenge-club-66cfec5ab3b80c0bf4f3e3229f3eecf88840734d.tar.bz2 perlweeklychallenge-club-66cfec5ab3b80c0bf4f3e3229f3eecf88840734d.zip | |
RogerBW solutions for challenge no. 219
Diffstat (limited to 'challenge-219/roger-bell-west/lua/ch-2.lua')
| -rwxr-xr-x | challenge-219/roger-bell-west/lua/ch-2.lua | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/challenge-219/roger-bell-west/lua/ch-2.lua b/challenge-219/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..303ebc51db --- /dev/null +++ b/challenge-219/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,64 @@ +#! /usr/bin/lua + +function propersize(t) + local l=0 + for k,v in pairs(t) do + l = l + 1 + end + return l +end + +function keys(t) + local a = {} + for k, v in pairs(t) do + table.insert(a, k) + end + return a +end + +function travelexpenditure(costs, days0) + local days = days0 + table.sort(days) + local validities = {1, 7, 30} + local stack = {} + table.insert(stack, {0, days}) + local cheapest = #days * costs[1] + while #stack > 0 do + local c = table.remove(stack, 1) + if #(c[2]) == 0 then + if c[1] < cheapest then + cheapest = c[1] + end + else + if c[1] < cheapest then + local start = c[2][1] + for i = 1, 3 do + local ed = start + validities[i] - 1 + local dtd = {} + for _, j in ipairs(c[2]) do + if j > ed then + table.insert(dtd , j) + end + end + table.insert(stack, {c[1] + costs[i], dtd}) + end + end + end + end + return cheapest +end + +if travelexpenditure({2, 7, 25}, {1, 5, 6, 7, 9, 15}) == 11 then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if travelexpenditure({2, 7, 25}, {1, 2, 3, 5, 7, 10, 11, 12, 14, 20, 30, 31}) == 20 then + io.write("Pass") +else + io.write("FAIL") +end +print("") + |
