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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
FIELD_WIDTH = 15;
FIELD_HEIGHT = 15;
create_empty_field := fn {
empty_row := [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
[
empty_row, empty_row, empty_row,
empty_row, empty_row, empty_row,
empty_row, empty_row, empty_row,
empty_row, empty_row, empty_row,
empty_row, empty_row, empty_row
]
};
field = create_empty_field();
# Place a glider on the field.
field[1][2] = 1;
field[2][3] = 1;
field[3][1] = 1;
field[3][2] = 1;
field[3][3] = 1;
loop {
new_field = create_empty_field();
# Compute new field.
y = 0;
loop if y < FIELD_HEIGHT {
x = 0;
loop if x < FIELD_WIDTH {
top := if y == 0 { 0 } else { field[y - 1][x] };
top_left := if x == 0 || y == 0 { 0 } else { field[y - 1][x - 1] };
top_right := if x == FIELD_WIDTH - 1 || y == 0 { 0 } else { field[y - 1][x + 1] };
bottom := if y == FIELD_HEIGHT - 1 { 0 } else { field[y + 1][x] };
bottom_left := if x == 0 || y == FIELD_HEIGHT - 1 { 0 } else { field[y + 1][x - 1] };
bottom_right := if x == FIELD_WIDTH - 1 || y == FIELD_HEIGHT - 1 { 0 } else { field[y + 1][x + 1] };
left := if x == 0 { 0 } else { field[y][x - 1] };
right := if x == FIELD_WIDTH - 1 { 0 } else { field[y][x + 1] };
neighbors := top + top_left + top_right + bottom + bottom_left + bottom_right + left + right;
if field[y][x] == 0 {
if neighbors == 3 {
new_field[y][x] = 1;
};
} else {
if neighbors == 2 || neighbors == 3 {
new_field[y][x] = 1;
};
};
x = x + 1;
};
y = y + 1;
};
# Print field.
y = 0;
field_str = "";
loop if y < FIELD_HEIGHT {
row = "";
x = 0;
loop if x < FIELD_WIDTH {
if field[y][x] == 1 {
row = row + "#";
} else {
row = row + ".";
};
x = x + 1;
};
field_str = "{field_str}{row}\n";
y = y + 1;
};
print field_str;
field = new_field;
};
|