Floyd's triangle: Difference between revisions

Corrected Erlang
(Corrected Erlang)
Line 418:
 
=={{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_triangleintegers( 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.
 
spaceprint(F,D, LN ) ->
[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.
maintask() ->
print( 5 ),
11 12 13 print( 14 15).
 
 
 
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} ) ->
22 23 24 25 26End = 27Start + 28N,
{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)) ),
7 8 9 10Paddings.
 
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>
{{out}}
<pre> 1
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
 
2 1 3
4 2 5 36
7 4 8 59 610
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
37 38 2939 40 3041 42 3143 44 32 33 34 35 3645
46 47 3748 49 3850 51 3952 53 40 54 41 42 43 44 4555
56 57 4658 59 4760 61 4862 63 49 64 50 65 51 52 53 54 5566
67 68 5669 70 5771 72 5873 74 59 75 60 76 61 77 62 63 64 65 6678
79 80 6781 82 6883 84 6985 86 70 87 71 88 72 89 73 90 74 75 76 77 7891
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>
 
Anonymous user