Langton's ant: Difference between revisions
Content added Content deleted
Line 6,011: | Line 6,011: | ||
</pre > |
</pre > |
||
=={{header|make}}== |
|||
<syntaxhighlight lang="make"># Langton's ant Makefile |
|||
# netpbm is an ancient collection of picture file formats |
|||
# convert and display are from imagemagick |
|||
.PHONY: display |
|||
display: ant.png |
|||
display $< |
|||
ant.png: ant.pbm |
|||
convert $< $@ |
|||
n9:=1 2 3 4 5 6 7 8 9 |
|||
n100:=$(n9) $(foreach i,$(n9),$(foreach j,0 $(n9),$i$j)) 100 |
|||
ndec:=0 $(n100) |
|||
ninc:=$(wordlist 2,99,$(n100)) |
|||
$(foreach i,$(n100),$(eval row$i:=$(foreach j,$(n100),0))) |
|||
.PHONY: $(foreach i,$(ndec),row$i) |
|||
row0: |
|||
@echo >ant.pbm P1 |
|||
@echo >>ant.pbm '#' Langton"'"s ant |
|||
@echo >>ant.pbm 100 100 |
|||
rowrule=row$i: row$(word $i,$(ndec)); @echo >>ant.pbm $$($$@) |
|||
$(foreach i,$(n100),$(eval $(rowrule))) |
|||
ant.pbm: Makefile row100 |
|||
@: |
|||
x:=50 |
|||
y:=50 |
|||
direction:=1 |
|||
turn=$(eval direction:=$(t$(xy)$(direction))) |
|||
xy=$(word $x,$(row$y)) |
|||
t01:=4 |
|||
t02:=1 |
|||
t03:=2 |
|||
t04:=3 |
|||
t11:=2 |
|||
t12:=3 |
|||
t13:=4 |
|||
t14:=1 |
|||
flip=$(eval row$y:=$(start) $(not$(xy)) $(end)) |
|||
start=$(wordlist 1,$(word $x,$(ndec)),$(row$y)) |
|||
not0:=1 |
|||
not1:=0 |
|||
end=$(wordlist $(word $x,$(ninc) 100),100,$(row$y)) |
|||
step=$(eval $(step$(direction))) |
|||
step1=y:=$(word $y,exit $(n100)) |
|||
step2=x:=$(word $x,$(ninc) exit) |
|||
step3=y:=$(word $y,$(ninc) exit) |
|||
step4=x:=$(word $x,exit $(n100)) |
|||
iteration=$(if $(filter exit,$x $y),,$(turn)$(flip)$(step)) |
|||
$(foreach i,$(n100) $(n100),$(foreach j,$(n100),$(iteration))) |
|||
</syntaxhighlight> |
|||
=={{header|Mathematica}}/{{header|Wolfram Language}}== |
=={{header|Mathematica}}/{{header|Wolfram Language}}== |