Prime triangle: Difference between revisions
Content added Content deleted
(Created Nim solution.) |
m (Moved Python to the right place) |
||
Line 1,536: | Line 1,536: | ||
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
||
"9.7s" |
"9.7s" |
||
</pre> |
|||
=={{header|Python}}== |
|||
<syntaxhighlight lang="python"> |
|||
from numpy import array |
|||
# for Rosetta Code by MG - 20230312 |
|||
def is_prime(n: int) -> bool: |
|||
assert n < 64 |
|||
return ((1 << n) & 0x28208a20a08a28ac) != 0 |
|||
def prime_triangle_row(a: array, start: int, length: int) -> bool: |
|||
if length == 2: |
|||
return is_prime(a[0] + a[1]) |
|||
for i in range(1, length - 1, 1): |
|||
if is_prime(a[start] + a[start + i]): |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
if prime_triangle_row(a, start + 1, length - 1): |
|||
return True |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
return False |
|||
def prime_triangle_count(a: array, start: int, length: int) -> int: |
|||
count: int = 0 |
|||
if length == 2: |
|||
if is_prime(a[start] + a[start + 1]): |
|||
count += 1 |
|||
else: |
|||
for i in range(1, length - 1, 1): |
|||
if is_prime(a[start] + a[start + i]): |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
count += prime_triangle_count(a, start + 1, length - 1) |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
return count |
|||
def print_row(a: array): |
|||
if a == []: |
|||
return |
|||
print("%2d"% a[0], end=" ") |
|||
for x in a[1:]: |
|||
print("%2d"% x, end=" ") |
|||
print() |
|||
for n in range(2, 21): |
|||
tr: array = [_ for _ in range(1, n + 1)] |
|||
if prime_triangle_row(tr, 0, n): |
|||
print_row(tr) |
|||
print() |
|||
for n in range(2, 21): |
|||
tr: array = [_ for _ in range(1, n + 1)] |
|||
if n > 2: |
|||
print(" ", end="") |
|||
print(prime_triangle_count(tr, 0, n), end="") |
|||
print() |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
1 2 |
|||
1 2 3 |
|||
1 2 3 4 |
|||
1 2 3 4 5 |
|||
1 4 3 2 5 6 |
|||
1 4 3 2 5 6 7 |
|||
1 2 3 4 7 6 5 8 |
|||
1 2 3 4 7 6 5 8 9 |
|||
1 2 3 4 7 6 5 8 9 10 |
|||
1 2 3 4 7 6 5 8 9 10 11 |
|||
1 2 3 4 7 10 9 8 5 6 11 12 |
|||
1 2 3 4 7 6 5 12 11 8 9 10 13 |
|||
1 2 3 4 7 6 5 12 11 8 9 10 13 14 |
|||
1 2 3 4 7 6 13 10 9 8 11 12 5 14 15 |
|||
1 2 3 4 7 6 5 12 11 8 15 14 9 10 13 16 |
|||
1 2 3 4 7 6 5 12 11 8 9 10 13 16 15 14 17 |
|||
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 |
|||
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 19 |
|||
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 19 20 |
|||
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
|||
</pre> |
</pre> |
||
Line 1,876: | Line 1,955: | ||
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
||
</pre> |
|||
=={{header|Python}}== |
|||
<syntaxhighlight lang="python"> |
|||
from numpy import array |
|||
# for Rosetta Code by MG - 20230312 |
|||
def is_prime(n: int) -> bool: |
|||
assert n < 64 |
|||
return ((1 << n) & 0x28208a20a08a28ac) != 0 |
|||
def prime_triangle_row(a: array, start: int, length: int) -> bool: |
|||
if length == 2: |
|||
return is_prime(a[0] + a[1]) |
|||
for i in range(1, length - 1, 1): |
|||
if is_prime(a[start] + a[start + i]): |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
if prime_triangle_row(a, start + 1, length - 1): |
|||
return True |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
return False |
|||
def prime_triangle_count(a: array, start: int, length: int) -> int: |
|||
count: int = 0 |
|||
if length == 2: |
|||
if is_prime(a[start] + a[start + 1]): |
|||
count += 1 |
|||
else: |
|||
for i in range(1, length - 1, 1): |
|||
if is_prime(a[start] + a[start + i]): |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
count += prime_triangle_count(a, start + 1, length - 1) |
|||
a[start + i], a[start + 1] = a[start + 1], a[start + i] |
|||
return count |
|||
def print_row(a: array): |
|||
if a == []: |
|||
return |
|||
print("%2d"% a[0], end=" ") |
|||
for x in a[1:]: |
|||
print("%2d"% x, end=" ") |
|||
print() |
|||
for n in range(2, 21): |
|||
tr: array = [_ for _ in range(1, n + 1)] |
|||
if prime_triangle_row(tr, 0, n): |
|||
print_row(tr) |
|||
print() |
|||
for n in range(2, 21): |
|||
tr: array = [_ for _ in range(1, n + 1)] |
|||
if n > 2: |
|||
print(" ", end="") |
|||
print(prime_triangle_count(tr, 0, n), end="") |
|||
print() |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
1 2 |
|||
1 2 3 |
|||
1 2 3 4 |
|||
1 2 3 4 5 |
|||
1 4 3 2 5 6 |
|||
1 4 3 2 5 6 7 |
|||
1 2 3 4 7 6 5 8 |
|||
1 2 3 4 7 6 5 8 9 |
|||
1 2 3 4 7 6 5 8 9 10 |
|||
1 2 3 4 7 6 5 8 9 10 11 |
|||
1 2 3 4 7 10 9 8 5 6 11 12 |
|||
1 2 3 4 7 6 5 12 11 8 9 10 13 |
|||
1 2 3 4 7 6 5 12 11 8 9 10 13 14 |
|||
1 2 3 4 7 6 13 10 9 8 11 12 5 14 15 |
|||
1 2 3 4 7 6 5 12 11 8 15 14 9 10 13 16 |
|||
1 2 3 4 7 6 5 12 11 8 9 10 13 16 15 14 17 |
|||
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 |
|||
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 19 |
|||
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 19 20 |
|||
1 1 1 1 1 2 4 7 24 80 216 648 1304 3392 13808 59448 155464 480728 1588162 |
|||
</pre> |
</pre> |