-module(prog).
 
-define(SIDES, 4).
 
-export([main/0]).
 
 
main() ->
    msg2rect("helloworldhelloworld").

msg2rect(Message) ->
    VChars = length(Message) div ?SIDES,
    HChars = VChars + trunc(((length(Message) rem ?SIDES) / 2)),
    {Half1, Half2} = lists:split(trunc(length(Message) / 2), Message),
    {Top, Rest1} = lists:split(HChars, Half1),
    {Bottom, Rest2} = lists:split(HChars, Half2),
    io:format("~s~n", [Top]),
    msg2rect(lists:append([Rest1, Rest2]), HChars - 2),
    io:format("~s~n", [lists:reverse(Bottom)]).
 
msg2rect([], _) ->
    ok;
msg2rect([H|T], WSpaces) ->
    {Middle, Last} = lists:split(length(T) - 1, T),
    io:format("~s~s~s~n", [Last, lists:flatten(lists:duplicate(WSpaces, " ")), lists:flatten([H])]),
    msg2rect(Middle, WSpaces).