aboutsummaryrefslogtreecommitdiff
path: root/challenge-306/roger-bell-west/python
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2025-01-28 12:18:54 +0000
committerRoger Bell_West <roger@firedrake.org>2025-01-28 12:18:54 +0000
commitffd1c49cd82e7bd0be11ad57ac31090c0dc99b2e (patch)
treeb2ef3d7b4f57f9c049bbc3d1279f32074b4c3470 /challenge-306/roger-bell-west/python
parent4bb3874d4bbd36d0b85b74031a74479faa9306b7 (diff)
downloadperlweeklychallenge-club-ffd1c49cd82e7bd0be11ad57ac31090c0dc99b2e.tar.gz
perlweeklychallenge-club-ffd1c49cd82e7bd0be11ad57ac31090c0dc99b2e.tar.bz2
perlweeklychallenge-club-ffd1c49cd82e7bd0be11ad57ac31090c0dc99b2e.zip
RogerBW solutions for challenge no. 306
Diffstat (limited to 'challenge-306/roger-bell-west/python')
-rwxr-xr-xchallenge-306/roger-bell-west/python/ch-1.py36
-rwxr-xr-xchallenge-306/roger-bell-west/python/ch-2.py26
2 files changed, 62 insertions, 0 deletions
diff --git a/challenge-306/roger-bell-west/python/ch-1.py b/challenge-306/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..77fabf743a
--- /dev/null
+++ b/challenge-306/roger-bell-west/python/ch-1.py
@@ -0,0 +1,36 @@
+#! /usr/bin/python3
+
+import collections
+from itertools import islice
+
+# https://docs.python.org/3/library/itertools.html
+def sliding_window(iterable, n):
+ # sliding_window('ABCDEFG', 4) --> ABCD BCDE CDEF DEFG
+ it = iter(iterable)
+ window = collections.deque(islice(it, n), maxlen=n)
+ if len(window) == n:
+ yield tuple(window)
+ for x in it:
+ window.append(x)
+ yield tuple(window)
+
+def oddsum(a):
+ out = sum(a)
+ l = 3
+ while l <= len(a):
+ for s in sliding_window(a, l):
+ out += sum(s)
+ l += 2
+ return out
+
+import unittest
+
+class TestOddsum(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(oddsum([2, 5, 3, 6, 4]), 77, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(oddsum([1, 3]), 4, 'example 2')
+
+unittest.main()
diff --git a/challenge-306/roger-bell-west/python/ch-2.py b/challenge-306/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..d16bb157a1
--- /dev/null
+++ b/challenge-306/roger-bell-west/python/ch-2.py
@@ -0,0 +1,26 @@
+#! /usr/bin/python3
+
+def lastelement(a):
+ b = a
+ while True:
+ b.sort()
+ f = b.pop()
+ s = b.pop()
+ if f > s:
+ b.append(f - s)
+ if len(b) == 0:
+ return 0
+ if len(b) == 1:
+ return b[0]
+
+import unittest
+
+class TestLastelement(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(lastelement([3, 8, 5, 2, 9, 2]), 1, 'example 1')
+
+ def test_ex2(self):
+ self.assertEqual(lastelement([3, 2, 5]), 0, 'example 2')
+
+unittest.main()