Langston's Ant

From Public Wiki
Jump to navigation Jump to search

Synopsis

Performs a simulation of Langston's Ant

Notes

There are no borders, the map wraps edge to edge. Define statements have a 11x11 grid and 10 steps. The ANT always starts at, or near, the center. The ant defaults being oriented towards north as an initial condition.

Compilation

gcc -o Ant Ant.c

Code

 1 #include<stdio.h>
 2 #define X 11
 3 #define Y 11
 4 #define S 240
 5 
 6 void main(void)
 7 {
 8 	char world[X][Y];
 9 	unsigned short x, y, c, d, h, s;
10 	//init
11 	x=X/2; y=Y/2; h=3;
12 	for(c=0;c<Y;c++)
13 	{
14 		for(d=0;d<X;d++)
15 		{
16 			world[d][c] = '.';
17 		}
18 	}
19 
20 	//loop
21 	for(s=0;s<S;s++)
22 	{
23 		//print current state
24 		printf("S=%d\n\n",s+1);
25 		printf("%c", '/');
26 		for(c=0;c<X;c++)
27 		{
28 			printf("%c", '-');
29 		}
30 		printf("%c\n", '\\');
31 		for(c=0;c<Y;c++)
32 		{
33 			printf("%c", '|');
34 			for(d=0;d<X;d++)
35 			{
36 				if(d==x && c==y)
37 					printf("A");
38 				else
39 					printf("%c",world[d][c]);
40 			}
41 			printf("%c\n", '|');
42 		}
43 		printf("%c", '\\');
44 		for(c=0;c<X;c++)
45 		{
46 			printf("%c", '-');
47 		}
48 		printf("/\n\n");
49 		//turn logic
50 		if(world[x][y]=='.')
51 		{
52 			h++; //CW
53 			h = h % 4;
54 			world[x][y]='*';
55 		}
56 		else
57 		{	
58 			h--; //CCW
59 			h= h % 4;
60 			world[x][y]='.';
61 		}
62 		//move forward
63 		if(h==0)
64 			{if(y==0) y=Y-1; else y--;}
65 		if(h==2)
66 			{if(y==Y-1) y=0; else y++;}
67 		if(h==1)
68 			{if(x==X-1) x=0; else x++;}
69 		if(h==3)
70 			{if(x==0) x=X-1; else x--;}
71 	}
72 
73 	//terminate
74 	printf("\nEOS \n");
75 	return;
76 }