X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=003%2Fsrc%2Flife.erl;h=605fa95ce873533b2b4d2da920001db536cb531c;hb=917c9b6f1878c44e497d0e8dafc16920ffd8dcaf;hp=5f91d2681430aecd29ccc47b50f14eb1224dc9bd;hpb=160a4566dcc36d03f6af95e7c588cc7453fdd905;p=cellular-automata.git diff --git a/003/src/life.erl b/003/src/life.erl index 5f91d26..605fa95 100644 --- a/003/src/life.erl +++ b/003/src/life.erl @@ -7,7 +7,7 @@ -define(CHAR_ALIVE, 111). % "o" -define(CHAR_BAR, 45). % "-" --define(INTERVAL, 100). +-define(GEN_INTERVAL, 100). -record(state, {x :: non_neg_integer() @@ -73,10 +73,17 @@ life_loop( ,print_time = PrintTime }, - timer:sleep(?INTERVAL), + NewTimeMil = NewTime / 1000, + NextGenDelay = at_least_zero(round(?GEN_INTERVAL - NewTimeMil)), + timer:sleep(NextGenDelay), + life_loop(NewState). +at_least_zero(Integer) when Integer >= 0 -> Integer; +at_least_zero(_) -> 0. + + 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). @@ -94,6 +101,9 @@ do_print_status(Bar, X, Y, N, GenCount, TimeMic, PrintTimeMic) -> do_print_board(Board) -> + % It seems that just doing a fold should be faster than map + to_list + % combo, but, after measuring several times, map + to_list has been + % consistently (nearly twice) faster than either foldl or foldr. RowStrings = array:to_list( array:map( fun(_, Row) ->