aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/mohammad-anwar/python/ch-1.py
blob: 57529cc76e2664698b0305f0c8b9ebf3c195ab5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/python3

'''

Week 147:

    https://theweeklychallenge.org/blog/perl-weekly-challenge-147

Task #1: Truncatable Primme

    Write a script to generate first 20 left-truncatable prime numbers in base 10.

'''

import re
import math
import numpy
import unittest

def is_prime(n):
    if (n == 1):
        return False

    i = 2
    while (i <= int(math.sqrt(n))):
        if ((n % i) == 0):
            return False
        i += 1

    return True

def left_truncatable_numbers(n):
    numbers = []
    i = 0
    s = str(n)
    while (i < len(s)):
        numbers.append(int(s[i:]))
        i += 1

    return numbers

def left_truncatable_primes(count):
    ltp = []
    c   = 0
    n   = 2
    while (c < count):
        containZero = re.search('0', str(n))
        if ((not containZero) and is_prime(n)):
            numbers = left_truncatable_numbers(n)
            found = True
            if (len(numbers) >= 2):
                for i in numbers:
                    if (not is_prime(i)):
                        found = False

            if (found):
                ltp.append(n)
                c += 1

        n += 1

    return ltp

#
#
# Unit test class

class TestTruncatablePrime(unittest.TestCase):

   def test_example(self):
        exp = [2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197]
        got = left_truncatable_primes(20)
        self.assertEqual(numpy.alltrue(exp == got), True, 'Example')

unittest.main()