Prime triangle: Difference between revisions

Content added Content deleted
(→‎{{header|J}}: more concise approach)
Line 599: Line 599:
=={{header|J}}==
=={{header|J}}==


Essentially, we're traversing a directed graph starting at 1, ending at y, with edges such that adjacent pairs sum to a prime number and intermediate values between 1 and y.
<lang J>is_prime=: 1&p:@(+/)


Implementation:
is_prime_triangle=: {{
NB. y is index into L and thus analogous to *a
p=. is_prime L{~y+0 1
if. N=y do. p return.end.
i=. Y=. y+1
if. p do. if. is_prime_triangle Y do. 1 return.end.end.
while. M>i=.i+2 do.
if. is_prime L{~y,i do.
L=: (L{~Y,i) (i,Y)} L
if. is_prime_triangle Y do. 1 return.end.
L=: (L{~Y,i) (i,Y)} L
end.
end.
0
}}


<lang J>add_plink=: [:;{{ <y,"1 0 x #~ 1 p:+/|:(x=. x-. y),"0/{: y }}"1
prime_triangle_counter=: {{
prime_pair_seqs=: {{ y add_plink (2}.i.y) add_plink^:(y-2) 1 }}</lang>
NB. y is index into L and thus analogous to *a

p=. is_prime L{~y+0 1
Task example (displaying counts of number of valid sequences to the left, because that looks nice):
if. N=y do.

count=: count+p return.
<lang J>task=: {{
for_j.2}.i.1+y do.
N=. #seqs=. prime_pair_seqs j
echo (_8{.":N),' | ',3":{:seqs
end.
end.
i=. Y=. y+1
if. p do. prime_triangle_counter Y end.
while. M>i=. i+2 do.
if. is_prime L{~y,i do.
L=: (L{~Y,i) (i,Y)} L
prime_triangle_counter Y
L=: (L{~Y,i) (i,Y)} L
end.
end.
count
}}
}}


task 20
prime_triangles=: {{
for_k. i.y-1 do.
L=: l=. 1+i.1+M=: 1+N=: k
count=: 0
prime_triangle_counter 0
L=: l
assert is_prime_triangle 0
echo (8":count),' | ',3":L
end.
}}</lang>

Task example:

<lang J>
prime_triangles 20
1 | 1 2
1 | 1 2
1 | 1 2 3
1 | 1 2 3
Line 655: Line 621:
1 | 1 4 3 2 5
1 | 1 4 3 2 5
1 | 1 4 3 2 5 6
1 | 1 4 3 2 5 6
2 | 1 4 3 2 5 6 7
2 | 1 6 5 2 3 4 7
4 | 1 2 3 4 7 6 5 8
4 | 1 6 7 4 3 2 5 8
7 | 1 2 3 4 7 6 5 8 9
7 | 1 6 7 4 3 8 5 2 9
24 | 1 2 3 4 7 6 5 8 9 10
24 | 1 6 7 4 9 8 5 2 3 10
80 | 1 2 3 4 7 10 9 8 5 6 11
80 | 1 10 9 8 5 6 7 4 3 2 11
216 | 1 2 3 4 7 10 9 8 5 6 11 12
216 | 1 10 9 8 11 6 7 4 3 2 5 12
648 | 1 2 3 4 7 6 5 12 11 8 9 10 13
648 | 1 12 11 8 9 10 7 6 5 2 3 4 13
1304 | 1 2 3 4 7 6 13 10 9 8 11 12 5 14
1304 | 1 12 11 8 9 10 13 6 7 4 3 2 5 14
3392 | 1 2 3 4 7 6 13 10 9 8 11 12 5 14 15
3392 | 1 12 11 8 9 14 5 6 13 10 7 4 3 2 15
13808 | 1 2 3 4 7 6 5 12 11 8 15 14 9 10 13 16
13808 | 1 12 11 8 15 14 9 10 13 6 5 2 3 4 7 16
59448 | 1 2 3 4 7 6 5 12 11 8 9 10 13 16 15 14 17
59448 | 1 16 15 14 9 10 13 6 11 12 7 4 3 8 5 2 17
155464 | 1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18
155464 | 1 16 15 14 17 12 11 8 9 10 13 6 7 4 3 2 5 18
480728 | 1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 11 18 19
480728 | 1 18 13 16 15 14 17 12 11 8 9 10 7 6 5 2 3 4 19
1588162 | 1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 12 19 18 11 20</lang>
1588162 | 1 18 19 12 17 14 15 16 13 10 9 8 11 2 5 6 7 4 3 20</lang>


=={{header|Java}}==
=={{header|Java}}==