Skip to content

Instantly share code, notes, and snippets.

@chids
Created September 17, 2011 14:45
Show Gist options
  • Save chids/1224005 to your computer and use it in GitHub Desktop.
Save chids/1224005 to your computer and use it in GitHub Desktop.
2011-09-17 - Erlang Conway Game Of Life
-module(gol).
-include_lib("eunit/include/eunit.hrl").
next(World) ->
sets:fold(fun(Member, Result) ->
Count = sets:size(live_neighbours(Member, World)),
case Count of
2 ->
sets:add_element(Member, Result);
_ ->
Result
end
end,
sets:new(),
World).
live_neighbours(Cell, World) ->
{Row, Column} = Cell,
sets:filter(
fun(Member) ->
{X, Y} = Member,
(abs(Row - X) == 1) or (abs(Column - Y) == 1)
end,
World).
%% Any live cell with fewer than two live neighbours dies, as if caused by underpopulation.
rule1_survive_test() ->
World = sets:from_list([{0, 0}, {0, 1}, {0, 2}]),
New = next(World),
?assertEqual(1, sets:size(New)),
?assertMatch(true, sets:is_element({0, 1}, New)).
rule1_empty_test() ->
World = sets:from_list([{0, 0}]),
?assertEqual(0, sets:size(next(World))).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment