Skip to content

Instantly share code, notes, and snippets.

@gboncoffee
Created September 26, 2024 01:16
Show Gist options
  • Save gboncoffee/7571d8a948541052557f82162cf52b6e to your computer and use it in GitHub Desktop.
Save gboncoffee/7571d8a948541052557f82162cf52b6e to your computer and use it in GitHub Desktop.
Langton's Ant
#include <assert.h>
#include <stdio.h>
#include <time.h>
#define LONG_SPACED_STRING \
" " \
" " \
" " \
" " \
" " \
" " \
" " \
" "
#define CLRSCR() printf("\033[1;1H\033[2J")
static char map[80][81] = {
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING, LONG_SPACED_STRING,
LONG_SPACED_STRING, LONG_SPACED_STRING,
};
typedef enum
{
RIGHT = 0,
DOWN = 1,
LEFT = 2,
UP = 3
} AntDirection;
static void
PrintMap(void)
{
int i;
for (i = 0; i < 80; i++)
printf("%s\n", map[i]);
}
int
main(void)
{
unsigned int antX = 40;
unsigned int antY = 40;
int i;
char mapPos;
AntDirection direction = RIGHT;
struct timespec req;
req.tv_sec = 0;
req.tv_nsec = 62500000L / 4;
for (i = 0; i < 11000; i++)
{
assert(antX < 80 && antY < 80);
CLRSCR();
mapPos = map[antY][antX];
if (mapPos == '#')
{
mapPos = ' ';
direction = (direction + 1) % 4;
}
else
{
mapPos = '#';
direction = (direction - 1) % 4;
}
map[antY][antX] = '@';
PrintMap();
map[antY][antX] = mapPos;
switch (direction)
{
case UP:
antY--;
break;
case DOWN:
antY++;
break;
case LEFT:
antX--;
break;
case RIGHT:
antX++;
break;
}
nanosleep(&req, NULL);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment