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

62 lines
1.6 KiB
Text

[ stack 50 ] is xpos ( --> s )
[ stack 50 ] is ypos ( --> s )
[ xpos share 0 100 within
ypos share 0 100 within
and ] is inside ( --> b )
[ -1 ypos ] is north ( --> n s )
[ 1 xpos ] is east ( --> n s )
[ 1 ypos ] is south ( --> n s )
[ -1 xpos ] is west ( --> n s )
[ stack 0 ] is heading ( --> s )
[ 1 ] is right ( --> n )
[ -1 ] is left ( --> n )
[ heading take
+ 4 mod
heading put ] is turn ( --> )
[ heading share
[ table
north east south west ]
do tally ] is move ( --> )
[ ypos share peek
xpos share bit & 0 > ] is black? ( [ --> b )
[ ypos share
2dup peek
xpos share bit ~ &
unrot poke ] is white ( [ --> [ )
[ ypos share
2dup peek
xpos share bit |
unrot poke ] is black ( [ --> [ )
[ 50 xpos replace
50 ypos replace
0 heading replace ] is reset ( --> )
[ witheach
[ 100 times
[ dup i^ bit &
iff say "[]"
else say " " ]
cr
drop ] ] is draw ( [ --> )
[ reset
0 100 of
[ inside while
dup black? iff
[ white left ]
else
[ black right ]
turn
move
again ]
draw ] is ant ( --> )