aboutsummaryrefslogtreecommitdiff
path: root/challenge-192/roger-bell-west/python
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2022-11-21 13:27:38 +0000
committerRoger Bell_West <roger@firedrake.org>2022-11-21 13:27:38 +0000
commitab9c68aa298728a6c35d540dadeafbd9aaae713e (patch)
tree6f2f3e1f3bd8654ab81c9a7152cef133f61ba3e2 /challenge-192/roger-bell-west/python
parent0c88577ef9852fce77a47fad1d42e2f174b069e3 (diff)
downloadperlweeklychallenge-club-ab9c68aa298728a6c35d540dadeafbd9aaae713e.tar.gz
perlweeklychallenge-club-ab9c68aa298728a6c35d540dadeafbd9aaae713e.tar.bz2
perlweeklychallenge-club-ab9c68aa298728a6c35d540dadeafbd9aaae713e.zip
Solutions for challenge #192
Diffstat (limited to 'challenge-192/roger-bell-west/python')
-rwxr-xr-xchallenge-192/roger-bell-west/python/ch-1.py24
-rwxr-xr-xchallenge-192/roger-bell-west/python/ch-2.py45
2 files changed, 69 insertions, 0 deletions
diff --git a/challenge-192/roger-bell-west/python/ch-1.py b/challenge-192/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..b4384b5825
--- /dev/null
+++ b/challenge-192/roger-bell-west/python/ch-1.py
@@ -0,0 +1,24 @@
+#! /usr/bin/python3
+
+import unittest
+
+def binaryflip(n):
+ m = n
+ r = 0
+ while m > 0:
+ m >>= 1
+ r += 1
+ return (1 << r) - 1 - n
+
+class TestBinaryflip(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(binaryflip(5), 2, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(binaryflip(4), 3, 'example 2')
+
+ def test_ex3(self):
+ self.assertEqual(binaryflip(6), 1, 'example 3')
+
+unittest.main()
diff --git a/challenge-192/roger-bell-west/python/ch-2.py b/challenge-192/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..55a41e3843
--- /dev/null
+++ b/challenge-192/roger-bell-west/python/ch-2.py
@@ -0,0 +1,45 @@
+#! /usr/bin/python3
+
+import unittest
+import re
+
+def equaldistribution(list):
+ s = sum(list)
+ if s % len(list) != 0:
+ return -1
+ m = s // len(list)
+ out = 0
+ w = list
+ while True:
+ for i in range(len(list)-1):
+ if w[i] > m:
+ v = w[i] - m
+ w[i+1] += v
+ out += v
+ w[i] = m
+ elif w[i] < m:
+ v = min(m - w[i], w[i+1])
+ w[i+1] -= v
+ out += v
+ w[i] += v
+ done = True
+ for v in w:
+ if v != m:
+ done = False
+ break
+ if done:
+ break
+ return out
+
+class TestEqualdistribution(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(equaldistribution([1, 0, 5]), 4, "example 1")
+
+ def test_ex2(self):
+ self.assertEqual(equaldistribution([0, 2, 0]), -1, "example 2")
+
+ def test_ex3(self):
+ self.assertEqual(equaldistribution([0, 3, 0]), 2, "example 3")
+
+unittest.main()