#N canvas 344 63 717 681 10; #N canvas 119 92 565 561 grid 1; #X restore 168 75 pd grid; #N canvas 377 249 625 398 cell 0; #X obj 423 266 pointer; #X msg 422 244 traverse \$1 \, bang; #X obj 295 196 inlet; #X obj 58 127 filledpolygon color 0 1 0 0 0 10 10 10 10 0; #X obj 56 70 struct cell float x float y float next-color float color ; #X obj 294 217 unpack 0 0 0 s; #X obj 287 299 append cell x y color; #X connect 0 0 6 3; #X connect 1 0 0 0; #X connect 2 0 5 0; #X connect 5 0 6 0; #X connect 5 1 6 1; #X connect 5 2 6 2; #X connect 5 3 1 0; #X restore 425 170 pd cell; #X obj 381 142 list append pd-grid; #N canvas 506 536 611 418 ca 0; #X obj 64 89 struct ca float x float y array cells cell; #X obj 416 266 pointer; #X msg 415 244 traverse \$1 \, bang; #X obj 287 196 inlet; #X obj 287 299 append ca x y; #X obj 287 217 unpack 0 0 s; #X obj 287 322 outlet; #X obj 65 145 plot cells 0 0 0 0; #X connect 1 0 4 2; #X connect 2 0 1 0; #X connect 3 0 5 0; #X connect 4 0 6 0; #X connect 5 0 4 0; #X connect 5 1 4 1; #X connect 5 2 2 0; #X restore 381 170 pd ca; #X msg 381 112 10 10; #X obj 337 197 pointer; #X msg 337 174 bang; #X obj 230 266 setsize ca cells; #X floatatom 95 223 5 0 0 0 - - -; #X obj 216 412 element ca cells; #X obj 95 361 t f b f; #X obj 95 566 set cell x y color; #X obj 95 410 t f f; #X floatatom 95 125 5 0 0 1 side_length - -; #X obj 95 475 mod; #X obj 125 523 div; #X obj 95 180 t f f; #X obj 95 203 *; #X obj 125 544 * 10; #X obj 95 502 * 10; #X obj 125 293 s \$0-size; #X obj 353 226 s \$0-grid; #X floatatom 280 474 5 0 0 0 - - -; #X msg 95 76 bang; #X obj 280 495 s \$0-max; #X obj 323 383 r \$0-grid; #X obj 174 497 random 5; #X msg 337 63 bang; #X obj 337 87 t b b b; #N canvas 353 0 789 540 evolve 0; #X obj 246 70 r \$0-size; #X obj 230 105 f; #X obj 282 313 get cell color; #X obj 382 374 get cell color; #X obj 433 286 element ca cells; #X msg 118 67 bang; #X obj 540 257 r \$0-grid; #X floatatom 341 157 5 0 0 0 - - -; #X obj 162 68 metro 100; #X obj 162 45 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X floatatom 220 48 5 0 0 0 - - -; #N canvas 0 0 450 300 countto 0; #X obj 83 130 until; #X obj 83 159 f 0; #X obj 110 158 + 1; #X msg 124 130 0; #X obj 86 102 t f b; #X obj 90 81 inlet; #X obj 85 186 outlet; #X text 203 97 counts from 0 to inlet-float; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 0 6 0; #X connect 2 0 1 1; #X connect 3 0 1 1; #X connect 4 0 0 0; #X connect 4 1 3 0; #X connect 5 0 4 0; #X restore 260 156 pd countto; #N canvas 383 74 798 616 find-neighborhood 0; #X obj 278 74 inlet; #X obj 375 490 element ca cells; #X obj 343 176 - 1; #X obj 519 176 + 1; #X obj 345 443 moses; #X obj 375 464 moses; #X obj 578 70 r \$0-side-len; #X obj 482 463 r \$0-grid; #X obj 457 362 r \$0-size; #X text 324 73 in: position index; #X text 116 120 Neighbours:; #X obj 457 385 + 1; #X obj 375 519 outlet; #X text 507 560 above/below - left/right; #X obj 386 202 - 1; #X obj 472 200 + 1; #X obj 296 201 - 1; #X obj 568 202 + 1; #X obj 296 177 +; #X obj 568 177 +; #X obj 433 176 -; #X obj 262 177 +; #X obj 472 175 -; #X obj 386 177 -; #X obj 339 266 pack 0 0 0 0 0 0 0 0; #X obj 344 315 list-spigot; #X obj 278 114 t f f f f f f f f b; #X text 176 264 n nw w sw s se e ne; #X obj 416 293 r \$0-neighbour-mask; #X obj 432 465 mod; #X obj 344 364 list prepend 0; #X obj 437 342 tgl 15 0 empty empty wrap? 0 -6 0 8 -262144 -1 -1 0 1; #X obj 345 388 route 0 1; #X text 30 449 restrict to 0:size \, with wrap-around or not; #X connect 0 0 26 0; #X connect 1 0 12 0; #X connect 2 0 24 2; #X connect 3 0 24 6; #X connect 4 1 5 0; #X connect 5 0 1 0; #X connect 6 0 20 1; #X connect 6 0 21 1; #X connect 6 0 18 1; #X connect 6 0 19 1; #X connect 6 0 22 1; #X connect 6 0 23 1; #X connect 7 0 1 1; #X connect 8 0 11 0; #X connect 11 0 5 1; #X connect 11 0 29 1; #X connect 14 0 24 3; #X connect 15 0 24 5; #X connect 16 0 24 1; #X connect 17 0 24 7; #X connect 18 0 16 0; #X connect 19 0 17 0; #X connect 20 0 24 4; #X connect 21 0 24 0; #X connect 22 0 15 0; #X connect 23 0 14 0; #X connect 24 0 25 0; #X connect 25 0 30 0; #X connect 26 0 21 0; #X connect 26 1 18 0; #X connect 26 2 2 0; #X connect 26 3 23 0; #X connect 26 4 20 0; #X connect 26 5 22 0; #X connect 26 6 3 0; #X connect 26 7 19 0; #X connect 28 0 25 1; #X connect 29 0 1 0; #X connect 30 0 32 0; #X connect 31 0 30 1; #X connect 32 0 4 0; #X connect 32 1 29 0; #X restore 282 289 pd find-neighborhood; #X text 80 322 get colors of neighbours:; #X text 139 290 find neighbours:; #X text 502 372 get color of current element; #X obj 162 22 inlet; #X obj 220 24 inlet; #X obj 282 462 set cell next-color; #N canvas 590 407 453 398 update 0; #X obj 73 55 inlet; #N canvas 0 0 450 300 countto 0; #X obj 83 130 until; #X obj 83 159 f 0; #X obj 110 158 + 1; #X msg 124 130 0; #X obj 86 102 t f b; #X obj 90 81 inlet; #X obj 85 186 outlet; #X text 203 97 counts from 0 to inlet-float; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 0 6 0; #X connect 2 0 1 1; #X connect 3 0 1 1; #X connect 4 0 0 0; #X connect 4 1 3 0; #X connect 5 0 4 0; #X restore 73 87 pd countto; #X obj 73 141 element ca cells; #X obj 180 117 r \$0-grid; #X obj 73 192 get cell next-color; #X obj 73 248 set cell color; #X obj 73 165 t a a; #X text 210 216 make next-color become color; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 6 0; #X connect 3 0 2 1; #X connect 4 0 5 0; #X connect 6 0 4 0; #X connect 6 1 5 1; #X restore 157 191 pd update; #X text 178 217 And update; #N canvas 0 0 878 648 demonic-rule 0; #X obj 270 75 inlet; #X obj 270 503 outlet; #X obj 333 74 inlet; #X obj 333 116 t a a; #X obj 270 399 select 1; #X obj 270 452 f; #X obj 270 350 -; #X obj 270 142 t f f; #X obj 379 104 r \$0-max; #X obj 379 128 - 1; #X obj 363 156 ==; #X obj 356 401 select 0; #X obj 270 212 route 0 1; #X obj 270 188 list prepend 0; #X text 399 158 compare current color to MAX color; #X obj 270 374 == 1; #X text 422 405 If cur.col already is max \, then wait for a 0 neighbor and get swallowed by 0; #X msg 356 424 0; #X text 246 231 no!; #X text 309 232 yes!; #X obj 270 254 / 90; #X text 19 348 If not at MAX color \,; #X text 19 368 look for a neighbor; #X text 21 385 with: color = cur.color + 1; #X text 22 403 or: (1 == col - cur.col) is TRUE; #X text 84 231 Is cur.color at MAX?; #X text 41 140 save color below \, then evolve:; #X text 313 371 col - cur.col == 1?; #X obj 333 96 / 90; #X text 21 520 If such a neighbor is found \, current color gets swallowed by this neighbor's color.; #X connect 0 0 7 0; #X connect 2 0 28 0; #X connect 3 0 6 1; #X connect 3 1 10 0; #X connect 4 0 5 0; #X connect 5 0 1 0; #X connect 6 0 15 0; #X connect 7 0 13 0; #X connect 7 1 5 1; #X connect 8 0 9 0; #X connect 9 0 10 1; #X connect 10 0 13 1; #X connect 11 0 17 0; #X connect 12 0 20 0; #X connect 12 1 11 0; #X connect 13 0 12 0; #X connect 15 0 4 0; #X connect 17 0 1 0; #X connect 20 0 6 0; #X connect 28 0 3 0; #X restore 282 423 pd demonic-rule; #X obj 433 311 t a a; #X obj 230 129 t f f; #X obj 260 191 t b f f; #N canvas 347 364 708 436 game-of-life-rule 0; #X obj 145 19 inlet; #X obj 199 18 inlet; #X obj 171 85 f 0; #X obj 145 84 + 0; #X msg 161 60 0; #X obj 88 134 select 2 3; #X msg 88 170 1; #X msg 118 170 0; #X obj 145 40 / 90; #X obj 88 222 * 90; #X obj 88 249 outlet; #X obj 88 18 inlet; #X obj 88 52 b; #X obj 88 105 f; #X obj 199 42 b; #X text 217 88 accumulate colors of all neighbors; #X text 178 136 if color sum in (2 \, 3) make alive!; #X connect 0 0 8 0; #X connect 1 0 14 0; #X connect 2 0 3 1; #X connect 3 0 2 0; #X connect 3 0 13 1; #X connect 4 0 3 1; #X connect 4 0 2 1; #X connect 5 0 6 0; #X connect 5 1 6 0; #X connect 5 2 7 0; #X connect 6 0 9 0; #X connect 7 0 9 0; #X connect 8 0 3 0; #X connect 9 0 10 0; #X connect 11 0 12 0; #X connect 12 0 13 0; #X connect 13 0 5 0; #X connect 14 0 4 0; #X restore 82 418 pd game-of-life-rule; #X text 77 400 bang; #X text 142 399 color; #X text 203 400 cell; #X obj 108 372 demux; #X obj 282 366 demux; #X obj 382 349 demux; #X obj 142 349 r \$0-rule; #X obj 311 339 r \$0-rule; #X connect 0 0 1 1; #X connect 1 0 23 0; #X connect 2 0 30 0; #X connect 3 0 21 1; #X connect 4 0 22 0; #X connect 5 0 1 0; #X connect 6 0 4 1; #X connect 7 0 24 0; #X connect 8 0 1 0; #X connect 9 0 8 0; #X connect 10 0 8 1; #X connect 11 0 24 0; #X connect 12 0 2 0; #X connect 16 0 9 0; #X connect 17 0 10 0; #X connect 21 0 18 0; #X connect 22 0 31 0; #X connect 22 1 18 1; #X connect 23 0 19 0; #X connect 23 1 11 0; #X connect 24 0 29 0; #X connect 24 1 12 0; #X connect 24 2 4 0; #X connect 25 0 18 0; #X connect 29 0 25 0; #X connect 30 0 25 1; #X connect 30 1 21 0; #X connect 31 0 25 2; #X connect 31 1 3 0; #X connect 32 0 29 1; #X connect 33 0 30 1; #X connect 33 0 31 1; #X restore 228 75 pd evolve; #N canvas 0 0 450 300 countto 0; #X obj 83 130 until; #X obj 83 159 f 0; #X obj 110 158 + 1; #X msg 124 130 0; #X obj 86 102 t f b; #X obj 90 81 inlet; #X obj 85 186 outlet; #X text 203 97 counts from 0 to inlet-float; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 0 6 0; #X connect 2 0 1 1; #X connect 3 0 1 1; #X connect 4 0 0 0; #X connect 4 1 3 0; #X connect 5 0 4 0; #X restore 95 321 pd countto; #X obj 125 202 s \$0-side-len; #X obj 141 443 r \$0-side-len; #X obj 230 244 r \$0-size; #X obj 95 272 t f f; #X obj 175 517 * 90; #X text 343 413 get elem. pointer; #X text 50 591 set elem. position and random color; #X obj 228 56 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 280 434 loadbang; #X obj 551 268 loadbang; #X msg 550 317 1 1 1 1 1 1 1 1; #X text 510 414 n nw w sw s se e ne; #X msg 551 292 1 0 1 0 1 0 1 0; #X msg 550 365 0 1 0 1 0 1 0 1; #X obj 521 389 s \$0-neighbour-mask; #X floatatom 286 56 5 0 0 2 step_delay - -; #X msg 551 343 0 1 0 0 0 0 0 0; #X obj 448 21 cnv 15 160 100 empty empty IMPORTANT! 20 12 0 14 -258699 -262144 0; #X obj 494 91 s pd-grid; #X msg 495 71 clear; #X text 453 49 press "clear" on exit; #X obj 373 525 random 100; #X msg 373 584 0; #X msg 418 583 90; #X floatatom 450 524 5 0 0 0 - - -; #X text 445 547 for game of life; #X obj 379 64 loadbang; #X msg 316 454 2; #X obj 371 495 demux; #X obj 440 436 r \$0-rule; #X obj 373 546 moses 1; #X obj 229 145 s \$0-rule; #X obj 229 126 hradio 15 1 0 2 empty empty empty 0 -6 0 8 -262144 -1 -1 1; #X obj 230 107 loadbang; #X obj 359 439 select 0 1; #X msg 281 454 5; #X msg 104 102 30; #X msg 133 102 20; #X connect 2 0 3 0; #X connect 3 0 5 1; #X connect 4 0 2 0; #X connect 5 0 7 1; #X connect 5 0 21 0; #X connect 6 0 5 0; #X connect 8 0 34 0; #X connect 9 0 11 3; #X connect 10 0 12 0; #X connect 10 1 59 0; #X connect 10 2 9 0; #X connect 12 0 14 0; #X connect 12 1 15 0; #X connect 13 0 16 0; #X connect 14 0 19 0; #X connect 15 0 18 0; #X connect 16 0 17 0; #X connect 16 1 17 1; #X connect 16 1 31 0; #X connect 17 0 8 0; #X connect 18 0 11 1; #X connect 19 0 11 0; #X connect 22 0 24 0; #X connect 22 0 26 1; #X connect 23 0 13 0; #X connect 25 0 9 1; #X connect 26 0 35 0; #X connect 27 0 28 0; #X connect 28 0 6 0; #X connect 28 1 4 0; #X connect 28 2 50 0; #X connect 30 0 10 0; #X connect 32 0 15 1; #X connect 32 0 14 1; #X connect 33 0 7 0; #X connect 34 0 30 0; #X connect 34 1 20 0; #X connect 35 0 11 2; #X connect 38 0 29 0; #X connect 39 0 66 0; #X connect 40 0 43 0; #X connect 41 0 45 0; #X connect 43 0 45 0; #X connect 44 0 45 0; #X connect 46 0 29 1; #X connect 47 0 45 0; #X connect 50 0 49 0; #X connect 52 0 61 0; #X connect 53 0 11 2; #X connect 54 0 11 2; #X connect 55 0 61 1; #X connect 57 0 28 0; #X connect 58 0 22 0; #X connect 59 0 52 0; #X connect 59 1 26 0; #X connect 60 0 59 1; #X connect 60 0 65 0; #X connect 61 0 53 0; #X connect 61 1 54 0; #X connect 63 0 62 0; #X connect 64 0 63 0; #X connect 65 0 58 0; #X connect 65 1 66 0; #X connect 66 0 22 0; #X connect 67 0 13 0; #X connect 68 0 13 0;