
Help:=proc():print(`ToB(a,k),Rule1(a),ApRule(Li,a)`):
print(`Hist(a,k)`):
end:
#ToB(a,k): inputs a pos. integer and pos.
#integer k and outputs the binary rep.
#of a as a list of size k
ToB:=proc(a,k) 
if k=0 then
  if a=0 then
    RETURN([]):
  else
    RETURN(FAIL):
   fi:
fi:

if a<0 or a>=2^k then
 RETURN(FAIL):
fi:

if a>=2^(k-1) then
  RETURN([1,op(ToB(a-2^(k-1),k-1))]):
else
RETURN([0,op(ToB(a,k-1))]):
fi:
end:


Rule1:=proc(a) local r,i,Li,T:
r:=ToB(a,8):

Li:=[seq(ToB(-i,3),i=-7..0)]:


for i from 1 to nops(Li) do
  T[Li[i]]:=r[i]:
od:

op(T):
end:

#ApRule(Li,a): Applies NKS rule a to the list Li
ApRule:=proc(Li,a) local Li1,T:
T:=Rule1(a):

Li1:=[0,op(Li),0]:
[seq(T[[op(i..i+2,Li1)]],i=1..nops(Li1)-2)]:

end:


#The History for K iterations starting at
#0...010...0
Hist:=proc(a,K) local Li1,Li2,i:
Li1:=[0$K,1,0$K]:
Li2:=[Li1]:

for i from 1 to K-1 do
 Li1:=ApRule(Li1,a):
 Li2:=[op(Li2),Li1]:
od:

Li2:

end:







