Text processing/Max licenses in use: Difference between revisions

Content added Content deleted
(Added COBOL solution. Corrected PL/I lang tag.)
(Added Erlang)
Line 685: Line 685:
println(` $time`)
println(` $time`)
}</lang>
}</lang>

=={{header|Erlang}}==
<lang Erlang>
-module( text_processing_max_licenses ).

-export( [out_dates_from_file/1, task/0] ).

out_dates_from_file( Name ) ->
{ok, Binary} = file:read_file( Name ),
Lines = binary:split( Binary, <<"\n">>, [global] ),
{_N, Dict} = lists:foldl( fun out_dates/2, {0, dict:new()}, Lines ),
[{X, dict:fetch(X, Dict)} || X <- dict:fetch_keys( Dict )].

task() ->
[{Max, Dates} | _T] = lists:reverse(lists:sort(out_dates_from_file("mlijobs.txt")) ),
io:fwrite( "Max licenses was ~p at ~p~n", [Max, Dates] ).



out_dates( <<>>, Acc ) -> Acc;
out_dates( Line, {N, Dict} ) ->
[_License, Direction, <<"@">>, Date | _T] = [X || X <- binary:split(Line, <<" ">>, [global]), X =/= <<>>],
New_n = out_dates_n( N, Direction ),
New_dict = out_dates_dict( N, New_n, Date, Dict ),
{New_n, New_dict}.

out_dates_dict( N, New_n, Date, Dict ) when N > New_n -> dict:append( N, Date, Dict );
out_dates_dict( _N, _New_n, _Date, Dict ) -> Dict.

out_dates_n( N, <<"OUT">> ) -> N + 1;
out_dates_n( N, <<"IN">> ) -> N - 1.
</lang>
{{out}}
<pre>
12> text_processing_max_licenses:task().
Max licenses was 99 at [<<"2008/10/03_08:39:45">>,<<"2008/10/03_08:40:47">>]
</pre>


=={{header|Euphoria}}==
=={{header|Euphoria}}==