%format plain       % or plaing
% Life in TeX by Tomas Rokicki (rokicki@rocky.stanford.edu) (30 Aug 87)
% Here is an implementation of LIFE in TeX, on a 32 by 32 grid.
% Output goes to the screen; if anyone wants to hack it up to
% send output to a .dvi file in some pretty format, I would be
% interested.  It's a true hack, but an interesting One.
%
% To run, simply run TeX over it, and enter the coordinates of
% the points, one by one.  Enter a -1 for the last x coordinate.
% Try, for instance, 15, 16, 16, 15, 16, 16, 17, 16, 17, 15, -1.
 
\font\a=cmr10 at 11truept
\fontdimen2246\a=0pt
\newcount\p\newcount\q\newcount\x\newcount\y\newcount\t
\newcount\qq\newcount\abase\newcount\bbase\newcount\g
\abase=35\bbase=1158
\p=1
\loop
   \ifnum\p<23
      \fontdimen\p\a=0sp
      \advance\p by1
\repeat
\loop
   \read0 to\xcoord
   \x=\xcoord
   \ifnum\x>-1
      \read0 to\ycoord
      \y=\ycoord
      \multiply\y by 33
      \advance\y by\abase
      \advance\y by\x
      \fontdimen\y\a=5sp
\repeat
\def\yloop{{
   \y=0
   \def\w{}
   \loop
      \t=\fontdimen\p\a
      \ifnum\t>4
         \ifnum\t<8
            \qq=\q
            \advance\qq by-34
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by1
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by1
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by31
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by1
            \t=\fontdimen\qq\a\advance\t by1\fontdimen\qq\a=\t sp
            \advance\qq by1
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by31
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by1
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \advance\qq by1
            \t=\fontdimen\qq\a\advance\t by2\fontdimen\qq\a=\t sp
            \xdef\w{\w*}
         \else
            \xdef\w{\w.}
         \fi
      \else
         \xdef\w{\w.}
      \fi
      \fontdimen\p\a=0sp
      \global\advance\p by1
      \global\advance\q by1
      \advance\y by1
   \ifnum\y<32\repeat
   \immediate\write0{|\w|}
}}
\def\dogeneration{{
   \global\p=\abase
   \global\q=\bbase
   \immediate\write0{|--------------------------------| Generation \number\g}
   \x=0
   \loop
      \yloop
      \global\advance\p by1
      \global\advance\q by1
      \advance\x by1
   \ifnum\x<32\repeat
   \t=\abase
   \global\abase=\bbase
   \global\bbase=\t
}}
\loop
   \global\advance\g by1
   \dogeneration
\iftrue\repeat
\bye

