palindromic C programs

Steven Pemberton steven at mcvax.UUCP
Tue Sep 4 01:45:31 AEST 1984


> Are there any programs out there that when program
> 'foo' is executed it creates source for program 'bar' and vice-
> versa?  The result would be a bistable self generating program.
> And if bistable is possible, how about tristable, etc.?

In issue 47 of the Algol Bulletin, Chris Thomson of the Chion Corporation
presented, apart from a self-replicating Algol 68 program, ones that
replicated after 2 cycles (thus a=>b=>a), 3 cycles, 9 cycles, and then
finally a program that replicates itself after a random-length cycle of
expected length 1000!

For those of you interested, here is that last one:

(.INT s:=    0,e:=123;.STRING a="(.INT s:=    0,e:=123;
  .STRING a="";s:=(s*9+7)%*1000000;print(2*(a[:9]+whole(
  (s%1000=e|0|s),5)+a[15:33]+2*a[33:]))";s:=(s*9+7)%*100000;
  print(2*(a[:9]+whole((s%100=e|0|s),-5)+a[15:33])+2*a[33:]))

Subscripts can be used to get a substring of a string, eg a[15:33].  a[33:]
means from 33 to the end. % is integer division, %* is mod, (b|v1|v2) is the
same as C's e?v1:v2 and whole converts a value to a string.



More information about the Comp.lang.c mailing list