Langton's ant: Difference between revisions

Content added Content deleted
Line 1,979: Line 1,979:
func move(ant) {
func move(ant) {
ant::position::x += xInc[ant::direction]
ant.position.x += xInc[ant.direction]
ant::position::y += yInc[ant::direction]
ant.position.y += yInc[ant.direction]
}
}
func Array.step(ant) {
func Array.Step(ant) {
var ptCur = (var x: ant::position::x + ant::origin::x, var y: ant::position::y + ant::origin::y)
var ptCur = (var x: ant.position.x + ant.origin.x, var y: ant.position.y + ant.origin.y)
var leftTurn = this[ptCur::x][ptCur::y]
var leftTurn = this[ptCur.x][ptCur.y]
ant::direction =
ant.direction =
if leftTurn {
if leftTurn {
leftTurns[ant::direction]
leftTurns[ant.direction]
} else {
} else {
rightTurns[ant::direction]
rightTurns[ant.direction]
}
}
this[ptCur::x][ptCur::y] = !this[ptCur::x][ptCur::y]
this[ptCur.x][ptCur.y] = !this[ptCur.x][ptCur.y]
move(ant)
move(ant)
ptCur = (x: ant::position::x + ant::origin::x, y: ant::position::y + ant::origin::y)
ptCur = (x: ant.position.x + ant.origin.x, y: ant.position.y + ant.origin.y)
ant::outOfBounds =
ant.outOfBounds =
ptCur::x < 0 ||
ptCur.x < 0 ||
ptCur::x >= ant::width ||
ptCur.x >= ant.width ||
ptCur::y < 0 ||
ptCur.y < 0 ||
ptCur::y >= ant::height
ptCur.y >= ant.height
ant::position
ant.position
}
}
Line 2,018: Line 2,018:
let w = 100
let w = 100
let h = 100
let h = 100
let blacks = Array.empty(w, () => Array.empty(h, false))
let blacks = Array.Empty(w, () => Array.Empty(h, false))
let ant = newAnt(w, h)
let ant = newAnt(w, h)
while !ant::outOfBounds {
while !ant.outOfBounds {
blacks.step(ant)
blacks.Step(ant)
}
}