The C language implementation is output by the wolfham ry time-space diagram.
1 # include <stdio. h> 2 # include <stdlib. h> 3 # include <time. h> 4 # include <conio. h> 5 6 7 // row width 8 # define ROW_LEN 38 9 10 11 // bit domain structure 12 typedef struct bits; 13 struct bits {14 15 unsigned int c0: 1; 16 unsigned int c1: 1; 17 unsigned int c2: 1; 18 unsigned int c3: 1; 19 unsigned int c4: 1; 20 unsigned int c5: 1; 21 unsigned int c6: 1; 22 unsigned int c7: 1; 23}; 24 25 26 // Row Type 27 typ Edef bits row [(ROW_LEN + 7)/8]; 28 29 30 // read row meta 31 unsigned int get_cell (row rw, int x) {32 33 unsigned int re = 0; 34 35 36 if (x <-1 | x> ROW_LEN) {37 38 puts ("get_cell: coordinate error. "); 39 40 return re; 41} 42 43 if (-1 = x) {44 45 x = ROW_LEN-1; 46} 47 48 if (ROW_LEN = x) {49 50 x = 0; 51} 52 53 54 switch (x % 8) {55 56 case 0: {57 58 re = rw [x/8]. c0; 59} break; 60 61 case 1: {62 63 re = rw [x/8]. c1; 64} break; 65 66 case 2: {67 68 re = rw [x/8]. c2; 69} break; 70 71 case 3: {72 73 re = rw [x/8]. c3; 74} break; 75 76 case 4: {77 78 re = rw [x/8]. c4; 79} break; 80 81 case 5: {82 83 re = rw [x/8]. c5; 84} break; 85 86 case 6: {87 88 re = rw [x/8]. c6; 89} break; 90 91 case 7: {92 93 re = rw [x/8]. c7; 94} break; 95} 96 97 98 return re; 99} 100 101 102 // modify the Yuan cell 103 voi in the row D set_cell (row rw, int x, unsigned int v) {104 105 106 if (x <-1 | x> ROW_LEN) {107 108 puts ("set_cell: coordinate error. "); 109 110 return; 111} 112 113 if (-1 = x) {114 115 x = ROW_LEN-1; 116} 117 118 if (ROW_LEN = x) {119 120 x = 0; 121} 122 123 124 v = v % 2; 125 126 127 switch (x % 8) {128 129 case 0: {130 131 rw [x/8]. c0 = v; 132} break; 133 134 case 1: {135 136 rw [x/8]. c1 = v; 137} break; 138 139 cas E 2: {140 141 rw [x/8]. c2 = v; 142} break; 143 144 case 3: {145 146 rw [x/8]. c3 = v; 147} break; 148 149 case 4: {150 151 rw [x/8]. c4 = v; 152} break; 153 154 case 5: {155 156 rw [x/8]. c5 = v; 157} break; 158 159 case 6: {160 161 rw [x/8]. c6 = v; 162} break; 163 164 case 7: {165 166 rw [x/8]. c7 = v; 167} break; 168} 169 170 171 172 // in the evolutionary row, the metacell 173 unsigned int evo_cell (row rw, int x, unsigned char tab) {174 175 Unsigned char num = 0; 176 177 178 if (x <0 | x> ROW_LEN-1) {179 180 puts ("evo_cell: coordinate error. "); 181 182 return 0; 183} 184 185 num | = (unsigned char) get_cell (rw, x-1); 186 num <= 1; 188 num | = (unsigned char) get_cell (rw, x); 189 num <= 1; 190 num | = (unsigned char) get_cell (rw, x + 1 ); 191 192 193 return (tab> num) & 0x01; 194} 195 196 197 // evolution row to another row 198 void evo_row (row rw1, Row rw2, unsigned char tab) {199 200 int x; 201 202 203 for (x = 0; x <ROW_LEN; x ++) {204 205 set_cell (rw2, x, evo_cell (rw1, x, tab); 206} 207 208 209 210 // random initialization row 211 void rand_row (row rw) {212 213 int x; 214 215 216 for (x = 0; x <ROW_LEN; x ++) {217 218 set_cell (rw, x, rand () % 2 ); 219} 220} 221 222 223 // display row 224 void display_row (row rw) {225 226 int x; 227 228 229 for (x = 0; x <ROW_LEN; X ++) {230 231 printf ("% s", get_cell (rw, x )? "Rule": ""); 232} 233 234 printf ("\ n"); 235} 236 237 238 239 // select a rule. Rule 30 is selected here, random generation of isosceles triangle 240 // This automatic mechanism is the foundation of a random number algorithm 241 # define TYPE_ID 30242 243 244 // main function 245 int main (int argc, char * argv []) {246 247 row rw1, rw2; 248 249 250 srand (unsigned int) time (NULL); 251 252 253 rand_row (rw1); 254 255 while (1) {256 257 display_row (rw1); 258 259 _ getch (); 260 261 evo_row (rw1, rw2, TYPE_ID); 262 263 display_row (rw2); 264 265 _ getch (); 266 267 evo_row (rw2, rw1, TYPE_ID); 268} 269 270 return 0; 271}
Running effect: