Replace for-loop with map.
[cellular-automata.git] / life / 006 / life.ts
index e99d3fd..7b6ad3b 100644 (file)
@@ -4,7 +4,7 @@ type GridLocation = {r: number, k: number};
 
 interface GridInterface<A> {
     get            : (location: GridLocation) => A;
-    map            : (f : (location: GridLocation) => A) => Grid<A>;
+    map            : (f : (location: GridLocation) => A) => void;
     moore_neighbors: (origin : GridLocation) => Array<GridLocation>;
     print          : (toString : (A: A) => string) => void;
 };
@@ -53,17 +53,8 @@ class Grid<A> implements GridInterface<A> {
     };
 
     map(f : (location: GridLocation) => A) {
-        const cells = [];
-        for (let r = 0; r < this.rows; r++) {
-            cells[r] = [];
-            for (let k = 0; k < this.columns; k++) {
-                const location = {r: r, k: k};
-                cells[r][k] = f(location);
-            }
-        };
-        const init = ({r, k}) => cells[r][k];
-        const grid = new Grid({rows: this.rows, columns: this.columns, init: init});
-        return grid
+        this.cells =
+            this.cells.map((row, r) => row.map((_, k) => f({r: r, k: k})));
     };
 
     private print_border(): void {
@@ -160,7 +151,7 @@ namespace Life {
         };
 
         next() : void {
-            const grid = this.grid.map(
+            this.grid.map(
                 (location) => {
                     const neighbor_locations = this.grid.moore_neighbors(location);
                     const neighbor_states = neighbor_locations.map((l) => this.grid.get(l));
@@ -170,7 +161,6 @@ namespace Life {
                     return state_1
                 }
             );
-            this.grid = grid
         };
 
         print() : void {
This page took 0.023335 seconds and 4 git commands to generate.