Tutorials/Coding Life simulators
Jump to navigation
Jump to search
This is an incomplete collection of links to articles on the art of coding Life simulators.
Articles by Eric Lippert
In 202021, Eric Lippert wrote a 38part coding tutorial discussing a series of algorithms for simulating Conway's Life (and/or other cellular automata), in his blog called Fabulous adventures in coding.
 Part 1: Purpose and plan for Fabulous Adventures in Coding series
 Part 2: Intro to Life rules, plus intro to client and computation engine used in these articles
 Part 3: Naïve implementation of Life algorithm  fixed board vs. wraparound vs. embiggen as needed
 Part 4: Asymptotic performance of naïve Life algorithm  a series of useful digressions about bigO notation
 Part 5: Naïve algo is proportional to number of cells in grid  more salubrious and nourishing exercises with bigO notation
 Part 6: Naïve algo, concluded  speed bottlenecks and how to find them
 Part 7: Scholes' Life algorithm in one line of APL  life grid as array as mathematical value
 Part 8: Scholes' Life algo, concluded  performance metrics, and two ways to improve
 Part 9: Parallelizing computation of Life grids  SIMD (Single Instruction on Multiple Data)
 Part 10: Hardware acceleration and image processing  GPUs and their limitations re: Life
 Part 11: Optimization guru Michael Abrash's algorithm from the 1990's  performance, optimizations, and tradeoffs
 Part 12: Turning Abrash's algo into Stafford's algo  how to know when a cell might need to change?
 Part 13: Turning Abrash's algo into Stafford's algo, continued  performance as grid size increases
 Part 14: Uses of a bigger grid  puffers, rare ash, and the Wall of Death
 Part 15: Abrash's algo to Stafford's algo, continued  18 pounds in a 15pound sack
 Part 16: Stafford's algo, continued  updating neighbor counts
 Part 17: UI optimizations
 Part 18: Stafford's algo, continued  optimizations
 Part 19: Stafford's algo implementation completed  a lookup of functions
 Part 20: Stafford's algo concluded (almost)  verification of bigO predictions
 Part 21: Stafford's algo addendum  optimization suggestions from David Stafford, Michael Abrash, Terje Mathisen
 Part 22: Life with sparse arrays  see also Python version on Madelyn Eriksen's blog
 Part 23: Putting together a prototype of Hensel's QuickLife algo  data structure first intro
 Part 24: Prototype of Hensel's QuickLife algo, continued  stepping forward the center of a quad
 Part 25: Prototype of Hensel's QuickLife algo, continued  12x12 (9 Quad2s) > 8x8, 1 tick later
 Part 26: Prototype of Hensel's QuickLife algo, continued  Quad3s and Quad4s
 Part 27: Prototype of Hensel's QuickLife algo, continued  stepping algorithm
 Part 28: ProtoQuickLife analysis  speed not too bad, memory use pretty good
 Part 29: Optimization of Hensel's QuickLife algo  miscellaneous bittwiddling
 Part 30: Adding change tracking for quads in Hensel's QuickLife algo  a big optimization win
 Part 31: Implementation of Hensel's QuickLife algo, concluded
 Part 32: Core data structure of HashLife  introducing quadtrees, quads, and memoization of quads
 Part 33: Finding specific coordinates in a quadtree, drawing subsets of a quadtree
 Part 34: A first attempt at Gosper's HashLife algorithm  how do we step a quad forward one tick?
 Part 35: Deriving HashLife for real  a missed algorithmic optimization
 Part 36: Digging into debugging  a bug from part 32 tracked down, analyzed, and mercilessly exterminated
 Part 37: Are there any Life patterns that have unbounded quadratic growth? Yes!
 Part 38: A 1970's BASIC implementation of one of the simplest possible Life algorithms
Articles by DroneBetter
LifeWiki articles contributed by DroneBetter:
 Tutorials/Coding Life simulators/bitwise SWAR Life
 Tutorials/Coding Life simulators/eightfold reducer
