Floyd's triangle: Difference between revisions

Content added Content deleted
(Corrected Erlang)
Line 418: Line 418:


=={{header|Erlang}}==
=={{header|Erlang}}==
<lang erlang>
{{incorrect|Erlang|More than one space between 92 and 93 for example}}
-module( floyds_triangle ).
<lang erlang>% Implemented by Arjun Sunel
-module(floyd).
-export([main/0]).


-export( [integers/1, print/1, strings/1, task/0] ).
main() ->
floyd_triangle(5),
io:format("\n"),
floyd_triangle(14).


floyd_triangle(N) ->
integers( N ) ->
lists:reverse( integers_reversed(N) ).
D=length(lists:flatten(io_lib:format("~p", [N*(N+1)div 2]))),
lists: foreach(fun(X) -> floyd((1+X*(X+1)div 2)-X, X*(X+1)div 2,D) end,lists:seq(1,N)).
floyd(L, E ,D) ->
if
L =< E ->
F=length(lists:flatten(io_lib:format("~p", [L]))),
space(F,D,L),
floyd(L+1, E,D);
true ->
io:format("\n")
end.


space(F,D, L) ->
print( N ) ->
[io:fwrite("~s~n", [lists:flatten(X)]) || X <- strings(N)].
if

F < D ->
strings( N ) ->
io:format(" "),
Strings_reversed = [strings_from_integers(X) || X <- integers_reversed(N)],
space(F+1,D,L);
Paddings = paddings( [lengths(X) || X <- Strings_reversed] ),
true ->
[formats(X, Y) || {X, Y} <- lists:zip(Paddings, lists:reverse(Strings_reversed))].
io:format(" ~p",[L])

end.
task() ->
print( 5 ),
print( 14 ).



formats( Paddings, Strings ) -> [lists:flatten(io_lib:format(" ~*s", [X, Y])) || {X, Y} <- lists:zip(Paddings, Strings)].

integers_reversed( N ) ->
{_End, Integers_reversed} = lists:foldl( fun integers_reversed/2, {1, []}, lists:seq(0, N - 1) ),
Integers_reversed.

integers_reversed( N, {Start, Acc} ) ->
End = Start + N,
{End + 1, [lists:seq(Start, End) | Acc]}.

lengths( Strings ) -> [string:len(X) || X <- Strings].

paddings( [Last_line | T] ) ->
{[], Paddings} = lists:foldl( fun paddings/2, {paddings_lose_last(Last_line), [Last_line]}, lists:seq(1, erlang:length(T)) ),
Paddings.

paddings( _N, {Current, Acc} ) -> {paddings_lose_last(Current), [Current | Acc]}.

paddings_lose_last( List ) ->
[_H | T] = lists:reverse( List ),
lists:reverse( T ).

strings_from_integers( Integers ) -> [erlang:integer_to_list(X) || X <- Integers].
</lang>
</lang>
{{out}}
{{out}}
<pre> 1
<pre>
1
2 3
2 3
4 5 6
4 5 6
7 8 9 10
7 8 9 10
11 12 13 14 15
11 12 13 14 15
1

1
2 3
2 3
4 5 6
4 5 6
7 8 9 10
11 12 13 14 15
7 8 9 10
16 17 18 19 20 21
11 12 13 14 15
22 23 24 25 26 27 28
16 17 18 19 20 21
29 30 31 32 33 34 35 36
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
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
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
ok
</pre>
</pre>