diff options
Diffstat (limited to 'challenge-147/roger-bell-west/python')
| -rwxr-xr-x | challenge-147/roger-bell-west/python/ch-1.py | 53 | ||||
| -rwxr-xr-x | challenge-147/roger-bell-west/python/ch-2.py | 39 |
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() |
