4 function CHAR_BORDER
() {return "-"}
5 function CHAR_ALIVE
() {return "o"}
6 function CHAR_DEAD
() {return " "}
9 function get_random_state
() {
10 return int
(2 * rand
())
14 function get_char_of_state
(state
) {
17 } else if (state ==
0) {
23 function do_print_border
(x
) {
24 for (i=
1; i
<= x
; i
++) {
31 function do_print_generation
(board
, gen_id
, y
, x
) {
34 for (yi=
1; yi
<= y
; yi
++) {
35 for (xi=
1; xi
<= x
; xi
++) {
36 printf "%s", get_char_of_state
(board
[gen_id
, yi
, xi
])
46 function get_new_state
(state
, live_neighbors
) {
47 if (state ==
1 && live_neighbors
< 2) {
49 } else if (state ==
1 && live_neighbors
< 4) {
51 } else if (state ==
1 && live_neighbors
> 3) {
53 } else if (state ==
0 && live_neighbors ==
3) {
61 function set_generation
(board
, gen_id
, y
, x
) {
62 num_directions =
split("N, NE, E, SE, S, SW, W, NW", directions
, ", ");
64 offsets
["N" , "x"] =
0;
65 offsets
["N" , "y"] =
-1;
67 offsets
["NE", "x"] =
1;
68 offsets
["NE", "y"] =
-1;
70 offsets
["E" , "x"] =
1;
71 offsets
["E" , "y"] =
0;
73 offsets
["SE", "x"] =
1;
74 offsets
["SE", "y"] =
1;
76 offsets
["S" , "x"] =
0;
77 offsets
["S" , "y"] =
1;
79 offsets
["SW", "x"] =
-1;
80 offsets
["SW", "y"] =
1;
82 offsets
["W" , "x"] =
-1;
83 offsets
["W" , "y"] =
0;
85 offsets
["NW", "x"] =
-1;
86 offsets
["NW", "y"] =
-1;
88 prev_gen_id = gen_id
- 1;
90 for (yi=
1; yi
<= y
; yi
++) {
91 for (xi=
1; xi
<= x
; xi
++) {
93 board
[gen_id
, yi
, xi
] = get_random_state
()
95 state = board
[prev_gen_id
, yi
, xi
];
98 for (dir_i=
1; dir_i
<= num_directions
; dir_i
++) {
99 direction = directions
[dir_i
];
101 xn = offsets
[direction
, "x"] + xi
;
102 yn = offsets
[direction
, "y"] + yi
;
104 if (xn
> 0 && xn
<= x
&& yn
> 0 && yn
<= y
) {
105 neighbor_state = board
[prev_gen_id
, yn
, xn
];
106 live_neighbors
+= neighbor_state
;
110 board
[gen_id
, yi
, xi
] = get_new_state
(state
, live_neighbors
);
117 function set_delete_generation
(board
, gen_id
) {
118 for (cell in board
) {
119 if (match(cell
, "^" gen_id SUBSEP
)) {
127 "stty size" | getline stty_size_out
;
128 split(stty_size_out
, stty_size
);
131 y = stty_size
[1] - 3; # Minus 1 row for each: border, border, cursor
135 prev_gen_id = gen_id
;
138 set_generation
(board
, gen_id
, y
, x
);
139 do_print_generation
(board
, gen_id
, y
, x
);
140 set_delete_generation
(board
, prev_gen_id
);
This page took 0.055546 seconds and 4 git commands to generate.