aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/roger-bell-west/python
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-147/roger-bell-west/python')
-rwxr-xr-xchallenge-147/roger-bell-west/python/ch-1.py53
-rwxr-xr-xchallenge-147/roger-bell-west/python/ch-2.py39
2 files changed, 92 insertions, 0 deletions
diff --git a/challenge-147/roger-bell-west/python/ch-1.py b/challenge-147/roger-bell-west/python/ch-1.py
new file mode 100755
index 0000000000..18f827e01c
--- /dev/null
+++ b/challenge-147/roger-bell-west/python/ch-1.py
@@ -0,0 +1,53 @@
+#! /usr/bin/python3
+
+import unittest
+
+from math import sqrt,floor
+from collections import deque
+
+def genprimes(mx):
+ primesh=set(range(2,4))
+ for i in range(6,mx+2,6):
+ for j in range(i-1,i+2,2):
+ if j <= mx:
+ primesh.add(j)
+ q=deque([2,3,5,7])
+ p=q.popleft()
+ mr=floor(sqrt(mx))
+ while p <= mr:
+ if p in primesh:
+ for i in range(p*p,mx+1,p):
+ primesh.discard(i)
+ if len(q) < 2:
+ q.append(q[-1]+4)
+ q.append(q[-1]+2)
+ p=q.popleft()
+ primes=list(primesh)
+ primes.sort()
+ return primes
+
+def ltruncprimes(count):
+ out=[]
+ lt=0
+ p=[str(i) for i in genprimes(500)]
+ pp=set(p)
+ for pc in p:
+ l=len(pc)
+ c=True
+ for i in range(1,l):
+ if not pc[i:l] in pp:
+ c=False
+ break
+ if c:
+ out.append(int(pc))
+ lt += 1
+ if lt >= count:
+ break
+ return out
+
+class TestLtruncprimes(unittest.TestCase):
+
+ def test_ex1(self):
+ self.assertEqual(ltruncprimes(20),[2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197],'example 1')
+
+unittest.main()
diff --git a/challenge-147/roger-bell-west/python/ch-2.py b/challenge-147/roger-bell-west/python/ch-2.py
new file mode 100755
index 0000000000..b524b7e5e5
--- /dev/null
+++ b/challenge-147/roger-bell-west/python/ch-2.py
@@ -0,0 +1,39 @@
+#! /usr/bin/python3
+
+def pentagon(n):
+ return int(n*(3*n-1)/2)
+
+def pentpair():
+ fpent=[0]
+ rpent=dict()
+ mx=0
+ a=1
+ while 1:
+ while mx < a:
+ mx += 1
+ fpent.append(pentagon(mx))
+ rpent[fpent[mx]]=mx
+ for b in range(1,a):
+ d=fpent[a]-fpent[b]
+ if d in rpent:
+ s=fpent[a]+fpent[b]
+ while s > fpent[mx]:
+ mx += 1
+ fpent.append(pentagon(mx))
+ rpent[fpent[mx]]=mx
+ if s in rpent:
+ print("P({:d}) + P({:d}) = {:d} + {:d} = {:d} = P({:d})".format(
+ a, b,
+ fpent[a], fpent[b],
+ s,
+ rpent[s]))
+ print("P({:d}) - P({:d}) = {:d} - {:d} = {:d} = P({:d})".format(
+ a, b,
+ fpent[a], fpent[b],
+ d,
+ rpent[d]))
+ quit()
+ a += 1
+
+
+pentpair()