Anonymous user
Floyd's triangle: Difference between revisions
Corrected Erlang
(Corrected Erlang) |
|||
Line 418:
=={{header|Erlang}}==
<lang erlang>
-module( floyds_triangle ).
-export( [integers/1, print/1, strings/1, task/0] ).
main() ->▼
lists:reverse( integers_reversed(N) ).
[io:fwrite("~s~n", [lists:flatten(X)]) || X <- strings(N)].
strings( N ) ->
Strings_reversed = [strings_from_integers(X) || X <- integers_reversed(N)],
Paddings = paddings( [lengths(X) || X <- Strings_reversed] ),
[formats(X, Y) || {X, Y} <- lists:zip(Paddings, lists:reverse(Strings_reversed))].
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>
{{out}}
<pre>
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
1
2
4
7
11 12 13 14 15
▲ 7 8 9 10
▲ 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
46 47
56 57
67 68
79 80
▲ 92 93 94 95 96 97 98 99 100 101 102 103 104 105
</pre>
|