diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-04-07 01:32:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-07 01:32:52 +0100 |
| commit | 4832e5912bf07b2bad3aff3156c4ccc1bc01d830 (patch) | |
| tree | dae885a4f949f70f58c22542ccb08ed7a3f8b31a /challenge-211/roger-bell-west/lua/ch-2.lua | |
| parent | c76c373fdf70d1b34420d0108f616eac18fc1c8e (diff) | |
| parent | 22437e2fa18fda4713254cc11efdc21f4ece082a (diff) | |
| download | perlweeklychallenge-club-4832e5912bf07b2bad3aff3156c4ccc1bc01d830.tar.gz perlweeklychallenge-club-4832e5912bf07b2bad3aff3156c4ccc1bc01d830.tar.bz2 perlweeklychallenge-club-4832e5912bf07b2bad3aff3156c4ccc1bc01d830.zip | |
Merge pull request #7852 from Firedrake/rogerbw-challenge-211
RogerBW solutions for challenge no. 211
Diffstat (limited to 'challenge-211/roger-bell-west/lua/ch-2.lua')
| -rwxr-xr-x | challenge-211/roger-bell-west/lua/ch-2.lua | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/challenge-211/roger-bell-west/lua/ch-2.lua b/challenge-211/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..c524e76c6d --- /dev/null +++ b/challenge-211/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,78 @@ +#! /usr/bin/lua + +function combinations(arr, k) + local c = {} + for i = 1, k do + table.insert(c, i) + end + table.insert(c, #arr + 1) + table.insert(c, 0) + local out = {} + while true do + local inner = {} + for i = k, 1, -1 do + table.insert(inner, arr[c[i]]) + end + table.insert(out, inner) + local j = 1 + while c[j] + 1 == c[j + 1] do + c[j] = j + j = j + 1 + end + if j > k then + break + end + c[j] = c[j] + 1 + end + return ipairs(out) +end + +function sum(t) + local ss = 0 + for i, k in ipairs(t) do + ss = ss + k + end + return ss +end + +function splitsameaverage(a) + local ss = sum(a) + local ml = #a + local mx = ml // 2 + local ssa = false + for n = 1, mx do + for i, c in combinations(a, n) do + local ca = sum(c) + if (ca / n) == (ss - ca) / (ml - n) then + ssa = true + break + end + end + if ssa then + break + end + end + return ssa +end + +if splitsameaverage({1, 2, 3, 4, 5, 6, 7, 8}) then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if not splitsameaverage({1, 3}) then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if splitsameaverage({1, 2, 3}) then + io.write("Pass") +else + io.write("FAIL") +end +print("") + |
