Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
93
Task/Langtons-ant/AWK/langtons-ant.awk
Normal file
93
Task/Langtons-ant/AWK/langtons-ant.awk
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# usage: awk -v debug=0 -f langton.awk
|
||||
|
||||
# Simulates the cellular automaton "Langton's ant",
|
||||
# see http://en.wikipedia.org/wiki/Langton%27s_ant
|
||||
|
||||
function turnRight() {
|
||||
dir++
|
||||
if( dir>4 ) { dir=1 }
|
||||
}
|
||||
function turnLeft() {
|
||||
dir--
|
||||
if( dir<1 ) { dir=4 }
|
||||
}
|
||||
function move() {
|
||||
if (dir==1) { y--; z="^" }
|
||||
if (dir==3) { y++; z="v" }
|
||||
|
||||
if (dir==2) { x++; z=">" }
|
||||
if (dir==4) { x--; z="<" }
|
||||
}
|
||||
|
||||
function ant() {
|
||||
if( debug ) AntStat() ##
|
||||
|
||||
if( grid[x,y]==0 ) { turnLeft() } else { turnRight() }
|
||||
if( grid[x,y]==0 ) { color=1 } else { color=0 }
|
||||
|
||||
if( debug ) print( "# action", color, dir, z ) ##
|
||||
|
||||
grid[x,y] = color
|
||||
move()
|
||||
}
|
||||
|
||||
###
|
||||
|
||||
function AntStat() {
|
||||
printf( "Move# %d : Ant @ x=%d y=%d dir=%d %s color=%d\n",
|
||||
moveNr, x,y, dir,z, grid[x,y] )
|
||||
}
|
||||
function dumpGrid() {
|
||||
AntStat()
|
||||
|
||||
printf( "Grid:" )
|
||||
for(xx=1; xx<=limit/10; xx++) {
|
||||
printf( "....+....%s", xx )
|
||||
}
|
||||
printf "\n"
|
||||
|
||||
cSum=0
|
||||
for(yy=1; yy <= limit; yy++) {
|
||||
printf( "%4d:",yy )
|
||||
for(xx=1; xx <= limit; xx++) {
|
||||
c = grid[xx,yy]
|
||||
if( c ) cSum++
|
||||
c1++
|
||||
c2+=grid[xx,yy]
|
||||
if( (xx==x)&&(yy==y) ) { c=z } # Ant
|
||||
printf( c )
|
||||
}
|
||||
printf( "\n" )
|
||||
}
|
||||
printf( "Cells: %d 'black' cells: %d Moves: %d\n\n", limit*limit, cSum, moveNr )
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
print( "Langton's ant\n" )
|
||||
|
||||
limit = 72
|
||||
for(x=1; x <= limit; x++) {
|
||||
for(y=1; y <= limit; y++) {
|
||||
grid[x,y] = 0
|
||||
}
|
||||
}
|
||||
|
||||
moveNr = 0
|
||||
x = 36
|
||||
y = 28
|
||||
dir = 1 # 1=up/north 2=right/east 3=down/south 4=left/west
|
||||
z = "!"
|
||||
|
||||
while( moveNr < 11200 ) {
|
||||
moveNr++
|
||||
ant()
|
||||
if(x<0 || x>limit) break
|
||||
if(y<0 || y>limit) break
|
||||
|
||||
# Snapshots:
|
||||
if (moveNr==163 || moveNr==1297 || moveNr==10095 ) dumpGrid()
|
||||
if (y<=5 ) break
|
||||
}
|
||||
dumpGrid()
|
||||
}
|
||||
END { print("END.") }
|
||||
Loading…
Add table
Add a link
Reference in a new issue