RosettaCodeData/Task/Langtons-ant/APL/langtons-ant.apl
2023-07-01 13:44:08 -04:00

37 lines
1.1 KiB
APL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

⍝ initialize a Langton's Ant setup with a grid of size left x right (square by default)
langton {
⍝ If rows not specified, set equal to columns
⍝ 0=white, 1=black. Start with all white
grid 0
⍝ Start the ant in the middle
ant 2 ÷
⍝ Aimed in a random direction
dir ?4
⍝ return everything in a tuple
grid ant dir
}
⍝ iterate one step: takes and returns state as created by langton function
step {
grid ant dir
⍝ Turn left or right based on grid cell
dir 1 + 4|dir+2×grid[ant]
⍝ Toggle cell color
grid[ant] 1 - grid[ant]
⍝ Advance along dir. Since coordinates are matrix order (row,col),
⍝ up is -1 0, right is 0 1, down is 1 0, and left is 0 -1
ant + (4 2 ¯1 0, 0 1, 1 0, 0 ¯1)[dir;]
grid ant dir
}
⍝ to watch it run, open the variable pic in the monitor before executing this step
{} { state pic '.⌺'[1+1] _⎕dl ÷200 step } langton 100