X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=003%2Fsrc%2Flife.erl;h=562d1a0fa56714e3d86437c1b4ed7da616c3dcc1;hb=52e0c4ac8de849bb3181656cee086c553d30943d;hp=ec755f1be63ebda1813083fafd9fa2702f95cc2a;hpb=b4e740f3bc383b619f3bc01ea44041459cb02bd9;p=cellular-automata.git diff --git a/003/src/life.erl b/003/src/life.erl index ec755f1..562d1a0 100644 --- a/003/src/life.erl +++ b/003/src/life.erl @@ -14,9 +14,10 @@ ,y :: non_neg_integer() ,n :: non_neg_integer() ,bar :: string() - ,board=array:new() :: array() + ,board :: array() ,gen_count :: non_neg_integer() ,gen_duration :: non_neg_integer() + ,print_time :: non_neg_integer() }). @@ -32,8 +33,9 @@ bang(Args) -> ,n = X * Y ,bar = [?CHAR_BAR || _ <- lists:seq(1, X)] ,board = Board - ,gen_count = 1 + ,gen_count = 1 % Consider inital state to be generation 1 ,gen_duration = Time + ,print_time = 0 % There was no print time yet }, life_loop(State). @@ -50,27 +52,38 @@ life_loop( ,board = Board ,gen_count = GenCount ,gen_duration = Time + ,print_time = LastPrintTime }=State) -> - ok = do_print_status(Bar, X, Y, N, GenCount, Time), - ok = do_print_board(Board), + {PrintTime, ok} = timer:tc( + fun() -> + do_print_screen(Board, Bar, X, Y, N, GenCount, Time, LastPrintTime) + end + ), {NewTime, NewBoard} = timer:tc(fun() -> next_generation(X, Y, Board) end), NewState = State#state{board = NewBoard ,gen_count = GenCount + 1 ,gen_duration = NewTime + ,print_time = PrintTime }, timer:sleep(?INTERVAL), life_loop(NewState). -do_print_status(Bar, X, Y, N, GenCount, TimeMic) -> +do_print_screen(Board, Bar, X, Y, N, GenCount, Time, PrintTime) -> + ok = do_print_status(Bar, X, Y, N, GenCount, Time, PrintTime), + ok = do_print_board(Board). + + +do_print_status(Bar, X, Y, N, GenCount, TimeMic, PrintTimeMic) -> TimeSec = TimeMic / 1000000, + PrintTimeSec = PrintTimeMic / 1000000, ok = io:format("~s~n", [Bar]), ok = io:format( - "X: ~b Y: ~b CELLS: ~b GENERATION: ~b DURATION: ~f~n", - [X, Y, N, GenCount, TimeSec] + "X: ~b Y: ~b CELLS: ~b GENERATION: ~b DURATION: ~f PRINT TIME: ~f~n", + [X, Y, N, GenCount, TimeSec, PrintTimeSec] ), ok = io:format("~s~n", [Bar]).