home
/
code
/
cellular-automata.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7a9e70e
)
Organizing state into a record.
author
Siraaj Khandkar
<siraaj@khandkar.net>
Thu, 9 Aug 2012 03:04:34 +0000
(23:04 -0400)
committer
Siraaj Khandkar
<siraaj@khandkar.net>
Thu, 9 Aug 2012 03:05:11 +0000
(23:05 -0400)
003/src/life.erl
patch
|
blob
|
blame
|
history
diff --git
a/003/src/life.erl
b/003/src/life.erl
index
ea6b499
..
ec755f1
100644
(file)
--- a/
003/src/life.erl
+++ b/
003/src/life.erl
@@
-10,6
+10,16
@@
-define(INTERVAL, 100).
-define(INTERVAL, 100).
+-record(state, {x :: non_neg_integer()
+ ,y :: non_neg_integer()
+ ,n :: non_neg_integer()
+ ,bar :: string()
+ ,board=array:new() :: array()
+ ,gen_count :: non_neg_integer()
+ ,gen_duration :: non_neg_integer()
+ }).
+
+
%% ============================================================================
%% API
%% ============================================================================
%% ============================================================================
%% API
%% ============================================================================
@@
-17,31
+27,50
@@
bang(Args) ->
[X, Y] = [atom_to_integer(A) || A <- Args],
{Time, Board} = timer:tc(fun() -> init_board(X, Y) end),
bang(Args) ->
[X, Y] = [atom_to_integer(A) || A <- Args],
{Time, Board} = timer:tc(fun() -> init_board(X, Y) end),
- Generation = 1,
- life_loop(X, Y, Generation, Time, Board).
+ State = #state{x = X
+ ,y = Y
+ ,n = X * Y
+ ,bar = [?CHAR_BAR || _ <- lists:seq(1, X)]
+ ,board = Board
+ ,gen_count = 1
+ ,gen_duration = Time
+ },
+ life_loop(State).
%% ============================================================================
%% Internal
%% ============================================================================
%% ============================================================================
%% Internal
%% ============================================================================
-life_loop(X, Y, Generation, Time, Board) ->
- ok = do_print_status(X, Y, Generation, Time),
+life_loop(
+ #state{x = X
+ ,y = Y
+ ,n = N
+ ,bar = Bar
+ ,board = Board
+ ,gen_count = GenCount
+ ,gen_duration = Time
+ }=State) ->
+
+ ok = do_print_status(Bar, X, Y, N, GenCount, Time),
ok = do_print_board(Board),
ok = do_print_board(Board),
- {NextTime, NextBoard} = timer:tc(fun() -> next_generation(X, Y, Board) end),
- NextGeneration = Generation + 1,
+ {NewTime, NewBoard} = timer:tc(fun() -> next_generation(X, Y, Board) end),
+ NewState = State#state{board = NewBoard
+ ,gen_count = GenCount + 1
+ ,gen_duration = NewTime
+ },
+
timer:sleep(?INTERVAL),
timer:sleep(?INTERVAL),
- life_loop(
X, Y, NextGeneration, NextTime, NextBoard
).
+ life_loop(
NewState
).
-do_print_status(
X, Y, Generation
, TimeMic) ->
+do_print_status(
Bar, X, Y, N, GenCount
, TimeMic) ->
TimeSec = TimeMic / 1000000,
TimeSec = TimeMic / 1000000,
- Bar = [?CHAR_BAR || _ <- lists:seq(1, X)],
ok = io:format("~s~n", [Bar]),
ok = io:format(
"X: ~b Y: ~b CELLS: ~b GENERATION: ~b DURATION: ~f~n",
ok = io:format("~s~n", [Bar]),
ok = io:format(
"X: ~b Y: ~b CELLS: ~b GENERATION: ~b DURATION: ~f~n",
- [X, Y,
X * Y, Generation
, TimeSec]
+ [X, Y,
N, GenCount
, TimeSec]
),
ok = io:format("~s~n", [Bar]).
),
ok = io:format("~s~n", [Bar]).
This page took
0.0311 seconds
and
4
git commands to generate.