Conway's Game of Life: Difference between revisions

Jump to navigation Jump to search
1,360 bytes added ,  15:51, 12 April 2020
→‎Historical implementations: More from McDonnell's paper
(→‎Historical implementations: Details of early implementations)
(→‎Historical implementations: More from McDonnell's paper)
Line 9: Line 9:
== Historical implementations ==
== Historical implementations ==


First published in October 1970 by [[wikipedia:Martin Gardner|Martin Gardner]] in Scientific American<ref>Gardner, Martin (October 1970). "Mathematical Games – The fantastic combinations of John Conway's new solitaire game "life"". Scientific American. 223 (4): 120–123.</ref>, Conway's Game of Life quickly became a popular target of APL implementation. Jean Jacques Duby's 7-line interactive implementation appeared in [[APL Quote Quad]] exactly a year later.<ref>Jean Jacques Duby. "Conway's Game "Life"", [[APL Quote Quad]] Vol. III No. 2 & 3 p. 54. 1971-10-01. Reprinted ''SIGPLAN Notices'' [https://dl.acm.org/toc/sigplan/1971/6/10 Volume 6, Issue 10]; see [https://dl.acm.org/action/showFmPdf?doi=10.1145%2F1317448 Front matter] p. 120.</ref> Duby's [[tradfn]] takes as input a list of coordinates of live cells and displays subsequent states until no live cells remain or the user stops it; it was shown along with an pattern evolving into a [https://www.conwaylife.com/wiki/Beehive beehive]. The next state is computed one element at a time, so that the function makes little use of APL's array capabilities. The function was followed by a 9-line implementation in February 1972<ref>Bruce A. Beebe. "Life". [[APL Quote Quad]] Vol III No. 4 p. 37. 1972-02-10. Reprinted ''SIGPLAN Notices'' [https://dl.acm.org/toc/sigplan/1972/7/4 Volume 7, Issue 4]; in [https://dl.acm.org/doi/abs/10.1145/1115910.1115916 Algorithms].</ref> and both a 6-line and a 4-line implementation in June 1972<ref>W. J. Jones, "Game of Life" and D. A. Bonyun, "Game of Life". [[APL Quote Quad]] Vol III No. 5 p. 66-67. 1972-06-05</ref>. The last two implementations used more efficient strategies involving [[Rotate]] or [[indexing]] with an array index to obtain the neighbors of every array element at once.
First published in October 1970 by [[wikipedia:Martin Gardner|Martin Gardner]] in Scientific American<ref>Gardner, Martin (October 1970). "Mathematical Games – The fantastic combinations of John Conway's new solitaire game "life"". Scientific American. 223 (4): 120–123.</ref>, Conway's Game of Life quickly became a popular target of APL implementation. Jean Jacques Duby's 7-line interactive implementation appeared in [[APL Quote Quad]] exactly a year later.<ref>Jean Jacques Duby. "Conway's Game "Life"", [[APL Quote Quad]] Vol. III No. 2 & 3 p. 54. 1971-10-01. Reprinted ''SIGPLAN Notices'' [https://dl.acm.org/toc/sigplan/1971/6/10 Volume 6, Issue 10]; see [https://dl.acm.org/action/showFmPdf?doi=10.1145%2F1317448 Front matter] p. 120.</ref> Duby's [[tradfn]] takes as input a list of coordinates of live cells and displays subsequent states until no live cells remain or the user stops it; it was shown along with an pattern evolving into a [https://www.conwaylife.com/wiki/Beehive beehive]. The next state is computed one element at a time, so that the function makes little use of APL's array capabilities. The function was followed by a 9-line implementation in February 1972<ref>Bruce A. Beebe. "Life". [[APL Quote Quad]] Vol III No. 4 p. 37. 1972-02-10. Reprinted ''SIGPLAN Notices'' [https://dl.acm.org/toc/sigplan/1972/7/4 Volume 7, Issue 4]; in [https://dl.acm.org/doi/abs/10.1145/1115910.1115916 Algorithms].</ref>, both a 6-line and a 4-line implementation in June 1972<ref>W. J. Jones, "Game of Life" and D. A. Bonyun, "Game of Life". [[APL Quote Quad]] Vol III No. 5 p. 66-67. 1972-06-05</ref>, and an 8-line [[APL.SV]] implementation in 1974.<ref>Marc Sinykin and David Vorgang. [https://dl.acm.org/doi/abs/10.1145/585882.585901 Algorithm Number 124]. [[APL Quote Quad]] Vol 5 No. 4 p. 94. 1974-12.</ref> The last three implementations used more efficient strategies involving [[Rotate]], [[indexing]] with an array index, or [[Take]] to obtain the neighbors of every array element at once.


A survey of previous APL implementations along with two new 23-token implementations was given by [[Eugene McDonnell]] in "Life: Nasty, Brutish, and Short", published in the [[APL88]] conference proceedings.<ref>[[Eugene McDonnell|McDonnell, Eugene]]. [https://dl.acm.org/doi/abs/10.1145/55626.55659 "Life: Nasty, Brutish, and Short"] ([https://www.jsoftware.com/papers/eem/life.htm web]). [[APL88]] Conference Proceedings, [[APL Quote-Quad]] Vol. 18 No. 2, 1987-12.</ref> McDonnell also described how future language features, such as the [[Commute]] operator and a tesselation operator related to [[Cut operator|Cut]] and the much later [[Stencil]], might reduce this to as few as 11 tokens (one of which is a long list of integers), or to 9 tokens when using a pre-defined vector of matrices.
The tradition of [[one-liner]] Game of Life implementations was firmly established by [[Eugene McDonnell]]'s "Life: Nasty, Brutish, and Short", presented at [[APL88]].<ref>[[Eugene McDonnell|McDonnell, Eugene]]. [https://dl.acm.org/doi/abs/10.1145/55626.55659 "Life: Nasty, Brutish, and Short"] ([https://www.jsoftware.com/papers/eem/life.htm web]). [[APL88]] Conference Proceedings, [[APL Quote-Quad]] Vol. 18 No. 2, 1987-12.</ref> In addition to a survey of the Quote-Quad implementations listed above, McDonnell cites a 1984 ''[[IBM]] PC Tech Journal'' article which compared the expressiveness of various programming languages using the Game of Life as a benchmark. While the article presented favorably, [[Donald McIntyre]] wrote to the journal to complain about its verbosity, and present some logical simplifications. Like previous implementations, McIntyre's solution computes each of the eight neighbor arrays for the original state separately. McDonnell instead used [[SHARP APL]]'s [[Rank operator]] to apply multiple rotations separately in a single step, and showed that the same could be done with [[APL2]]'s [[Each]] operator. He first presented versions using two eight-element rotations vectors, and then showed how [[wikipedia:Don Knuth|Don Knuth]]'s Metafont implementation decomposed the sum into horizontal and vertical components and transferred this idea to APL, resulting in two 23-token implementations:
<source lang=apl>
⍝ SHARP APL
lf:((2×+⌿¯1 0 1⊖⍤0 2+⌿¯1 0 1⌽⍤0 2 ⍵)-⍵)∊5 6 7
⍝ APL2
lfe:((2×+⌿⊃¯1 0 1⊖¨+⌿¯1 0 1⌽¨⊂⍵)-⍵)∊5 6 7
</source>
McDonnell also described how future language features, such as the [[Commute]] operator and a tesselation operator related to [[Cut operator|Cut]] and the much later [[Stencil]], might reduce this to as few as 11 tokens (one of which is a long list of integers), or to 9 tokens when using a pre-defined vector of matrices.


[[John Scholes]] published a video in which he explains his own implementation of Life, the same as the function <source lang=apl inline>Life</source> above, in 2009.<ref name="scholes"/> Scholes' function resembles McDonnell's APL2 implementation in its use of three-element vertical and horizontal rotation vectors, but uses [[Inner Product]] and [[Outer Product]] rather than [[Each]] as well as a different arithmetic scheme.
[[John Scholes]] published a video in which he explains his own implementation of Life, the same as the function <source lang=apl inline>Life</source> above, in 2009.<ref name="scholes"/> Scholes' function resembles McDonnell's APL2 implementation in its use of three-element vertical and horizontal rotation vectors, but uses [[Inner Product]] and [[Outer Product]] rather than [[Each]] as well as a different arithmetic scheme.

Navigation menu