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] ). |
|||
⚫ | |||
floyd_triangle(5), |
|||
io:format("\n"), |
|||
floyd_triangle(14). |
|||
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. |
|||
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. |
|||
⚫ | |||
print( 5 ), |
|||
⚫ | |||
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 + 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( _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> |
<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 |
|||
2 3 |
|||
4 5 6 |
|||
7 8 9 10 |
|||
11 12 13 14 15 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
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 |
|||
⚫ | |||
79 80 81 82 83 84 85 86 87 88 89 90 91 |
|||
⚫ | |||
ok |
|||
</pre> |
</pre> |
||