runner% cat ranwalk.c /* Random walk in the plane. * Written by NR Wagner, 23 April 1997 */ #include #include #include #define MAXP 75 void blank_plane(char plane[][MAXP]); void one_step(int x, int y, int *new_x, int *new_y); void print_plane(char plane[][MAXP], int steps); void main(void) { char plane[MAXP][MAXP]; char alf[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"; int steps = 0; int x = 40, y = 40; /* initial location */ int new_x, new_y; srand48((long)time(NULL)); blank_plane(plane); while( x >= 0 && x < MAXP && y >= 0 && y < MAXP) { steps++; plane[x][y] = alf[(steps/50)%52]; one_step(x, y, &new_x, &new_y); x = new_x; y = new_y; } print_plane(plane, steps); } void blank_plane(char plane[][MAXP]) { int i, j; for(i = 0; i < MAXP; i++) for(j = 0; j < MAXP; j++) plane[i][j] = ' '; } void one_step(int x, int y, int *new_x, int *new_y) { if (drand48() < 0.5) { /* change x */ *new_y = y; if (drand48() < 0.5) *new_x = x + 1.0; else *new_x = x - 1.0; } else { /* change y */ *new_x = x; if (drand48() < 0.5) *new_y = y + 1.0; else *new_y = y - 1.0; } } void print_plane(char plane[][MAXP], int steps) { int i, j; printf("Number of steps to the boundary: %i\n", steps); printf(" "); for(j = 0; j < MAXP; j++) printf("%i", j/10); printf("|\n"); printf(" "); for(j = 0; j < MAXP; j++) printf("%i", j%10); printf("|\n"); printf(" "); for(j = 0; j < MAXP; j++) printf("-"); printf("|\n"); for(i = 0; i < MAXP; i++) { printf("%2i|", i); for(j = 0; j < MAXP; j++) printf("%c", plane[i][j]); printf("|\n"); } printf(" "); for(j = 0; j < MAXP; j++) printf("-"); printf("|\n"); } runner% cc -o ranwalk ranwalk.c runner% ranwalk Number of steps to the boundary: 2756 000000000011111111112222222222333333333344444444445555555555666666666677777| 012345678901234567890123456789012345678901234567890123456789012345678901234| ---------------------------------------------------------------------------| 0| | 1| | 2| | 3| | 4| | 5| | 6| | 7| | 8| | 9| | 10| | 11| | 12| KK | 13| KKKK | 14| KKKKL | 15| KLL NN | 16| KKLLL NNN | 17| KLLLL NNN | 18| K LL N N | 19| G KK LL NN NN | 20| GGG KKKJLLPPPPP N | 21| EE GGGG KKKJJJOPPPQRRRRM | 22| EEEDDGGG G KKKKJJJOPLLRRRRPUP | 23| DEEEEDGG G KJKKJJ feeRRRRUUTQQ | 24| DEDEEGGG FGG JKKI OffeSeURUUTQQ | 25| DDEEEFFFFFGGGGIKKI ffSeeeUUUUUQ | 26| DDDEEEF F GIIIIIfffSeeeUUUU | 27| DFFFFFF IIIIffHfSeeeUUU | 28| CCCFEFF IffHffeefeeXXX X | 29| CCCFFFF HHfffffffedXXXXX | 30| CCCFFF fffffWddWXX X | 31| CCCCCC ff Wdd VVVXV | 32| CCC fffWWWWdVVVVXV | 33| BBCC gg WWWdddd VXV | 34| BBBB g ddWWWddd X | 35| BB gggggddddd X | 36| AA ggg d XX | 37| AAA gggggd X XXX | 38| AAAA cgggcdd Y XX | 39| AAAAA ccggg YYXXXX | 40| A AAA gg YYYY | 41| AA ggg Z YYY | 42| ggccZZYYY | 43| gccZZZZY | 44| gccjZaaa | 45| gkkkjaaaa | 46| bgkkkjaj | 47| rqq ggbbkkaj | 48| qrrqpp h hhbgbhhkkkkj | 49| qrrqpp hhhhhhnhhbkjhjj | 50| qrrrqpwwwo o hhnnnnaakjljj | 51| qrttuuwowoooo nnnnnninnlllj | 52| sqqttuuwwww oooo mnnnnlllj | 53| sssttvuwvov oo mmnnnllljj | 54| ssqtvvvwwwww nnnn lllljj | 55| ss tvuuwwwww nmm llll | 56| sss s uvuwwwwxw mmmmml | 58| s svvvvvv rxxxyy mmll | 59| sssvvv yy xxyyy | 60| yyyyyyxxyzz | 61| yyyyyyBBz | 62| ABBB | 63| ABBBB | 64| ABBBBB | 65| AABBBBB | 66| AACCCBz | 67| CCCCCCCCCCCzzzz | 68| CCC AC Azz | 69| CCC AA AAz | 70| CCC AAAz | 71| CCCCC AAA | 72| CCCC | 73| DD | 74| D | ---------------------------------------------------------------------------|