// Conway's Game of Life - Working Implementation // Count neighbors for a 3x3 grid (hardcoded positions) countNeighbors : grid row col -> when row is 0 then when col is 0 then grid.0.1 + grid.1.0 + grid.1.1 1 then grid.0.0 + grid.0.2 + grid.1.0 + grid.1.1 + grid.1.2 2 then grid.0.1 + grid.1.1 + grid.1.2 _ then 0 1 then when col is 0 then grid.0.0 + grid.0.1 + grid.1.1 + grid.2.0 + grid.2.1 1 then grid.0.0 + grid.0.1 + grid.0.2 + grid.1.0 + grid.1.2 + grid.2.0 + grid.2.1 + grid.2.2 2 then grid.0.1 + grid.0.2 + grid.1.1 + grid.2.1 + grid.2.2 _ then 0 2 then when col is 0 then grid.1.0 + grid.1.1 + grid.2.1 1 then grid.1.0 + grid.1.1 + grid.1.2 + grid.2.0 + grid.2.2 2 then grid.1.1 + grid.1.2 + grid.2.1 _ then 0 _ then 0; // Apply Game of Life rules nextCell : grid row col -> with ( current : when row is 0 then when col is 0 then grid.0.0 1 then grid.0.1 2 then grid.0.2 _ then 0 1 then when col is 0 then grid.1.0 1 then grid.1.1 2 then grid.1.2 _ then 0 2 then when col is 0 then grid.2.0 1 then grid.2.1 2 then grid.2.2 _ then 0 _ then 0; neighbors : countNeighbors grid row col; ) -> when current is 1 then when (neighbors = 2 or neighbors = 3) is true then 1 _ then 0 _ then when (neighbors = 3) is true then 1 _ then 0; // Generate next generation for 3x3 grid step : grid -> { 0: { 0: nextCell grid 0 0, 1: nextCell grid 0 1, 2: nextCell grid 0 2 }, 1: { 0: nextCell grid 1 0, 1: nextCell grid 1 1, 2: nextCell grid 1 2 }, 2: { 0: nextCell grid 2 0, 1: nextCell grid 2 1, 2: nextCell grid 2 2 } }; // Blinker pattern (oscillator) blinker : { 0: { 0: 0, 1: 1, 2: 0 }, 1: { 0: 0, 1: 1, 2: 0 }, 2: { 0: 0, 1: 1, 2: 0 } }; // Run simulation io.out "Conway's Game of Life - Blinker Pattern"; io.out "Generation 0:"; io.out blinker; gen1 : step blinker; io.out "Generation 1:"; io.out gen1; gen2 : step gen1; io.out "Generation 2:"; io.out gen2; io.out "Complete!";