Floyd's triangle: Difference between revisions

Line 4,980:
92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
 
=={{header|Picat}}==
<lang Picat>import util.
 
go =>
println("N=5:"),
println(floyd1(5)),
nl,
println("N=14:"),
println(floyd2(14)),
nl.
 
% Calculate the numbers first and then format them
floyd1(N) = S =>
M = [[J+SS : J in 1..I] : I in 1..N, SS=sum(1..I-1)],
S = [slice(SS,2) : Row in M, SS = [to_fstring(to_fstring("%%%dd",M[N,I].to_string().length+1),E) :
{E,I} in zip(Row,1..Row.length)].join('')].join("\n").
 
 
% Variant based on the Prolog version.
% (Picat doesn't support all of SWI-Prolog's nifty format options so we have to tweak a bit.)
floyd2(N) = S =>
S = [],
foreach(I in 1..N)
SS = "",
foreach(J in 1..I)
Last = N * (N-1)/2+J,
V = I * (I-1) // 2 + J,
C = Last.to_string().length-1,
SS := SS ++ to_fstring(to_fstring("%%%dd",C), V)
end,
S := S ++ slice(SS,2) ++ "\n"
end.</lang>
 
Output:
<pre>N=5:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
 
N=14:
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 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105</pre>
 
=={{header|PicoLisp}}==
495

edits