-
Notifications
You must be signed in to change notification settings - Fork 0
/
life.ndf
49 lines (37 loc) · 1.3 KB
/
life.ndf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
% Get random integer X, Min <= X < Max ;
randominteger IS OPERATION Min Max {
first floor ((random 1) * (Max - Min)) + Min }
% Create random array of 0s and 1s ;
createarray IS OPERATION Height Width {
EACH randominteger (Height Width reshape single 0 2) }
% Check how many neighbors cell has ;
countneighbors IS OPERATION Position Board {
Row := first Position ;
Col := second Position ;
Posx := [(Row - 1) (Col - 1), (Row - 1) Col,
(Row - 1) (Col + 1), Row (Col - 1),
Row (Col + 1), (Row + 1) (Col - 1),
(Row + 1) Col, (Row + 1) (Col + 1)] ;
Posx := Posx EACHLEFT in grid Board sublist Posx ;
sum (Posx EACHLEFT pick Board) }
% Create array with with number of neighbors for every cell ;
allneighbors IS OPERATION Board {
(grid Board) EACHLEFT countneighbors Board }
% Find new cell state ;
nextcell IS OPERATION State Neighbors {
IF (State = 0) and (Neighbors = 3) THEN
1
ELSEIF (State = 1) and not (Neighbors in 2 3) THEN
0
ELSE
State
ENDIF }
% Find new board state ;
nextboard IS OPERATION Board {
Board EACHBOTH nextcell (allneighbors Board) }
spaces IS { write '---------------' ; }
main IS {
Brd := createarray 7 7 ; write Brd ; spaces ;
FOR I WITH count 4 DO
Brd := nextboard Brd ; write Brd ; spaces ;
ENDFOR ; }