diff --git a/README.md b/README.md index a9540ed..02f6ee1 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,10 @@ with the arrow keys. ## Broken This one is not working. Not bothering to fix it, got no git history. + + +## Functional + +Functional implementation. + +![fp](fp/recording.gif "Functional") diff --git a/fp/ca-fp.html b/fp/ca-fp.html new file mode 100755 index 0000000..4d72c74 --- /dev/null +++ b/fp/ca-fp.html @@ -0,0 +1,36 @@ + + + + CA + + + + + +
+ +
+ + + + + diff --git a/fp/ca-fp.js b/fp/ca-fp.js new file mode 100755 index 0000000..0578d93 --- /dev/null +++ b/fp/ca-fp.js @@ -0,0 +1,124 @@ + +var getEle = fp.curry(function(ele) { + return (document.querySelectorAll(ele).length === 1) ? document.querySelector(ele) : [...document.querySelectorAll(ele)]; +}); + + +function hexColor() { + var values = "01233456789ABCDEF"; + var result = []; + for(var i = 0; i < 6; i++) { + result.push(values[Math.floor(Math.random() * 16)]); + } + return '#'+result.join(''); +} + +var css = fp.curry(function(cssObj, ele) { + for(var key in cssObj) { + ele.style[key] = cssObj[key]; + } + return ele; +}); + + + +//-------------------------------- + + +var count_neighbours = function(r, c, grid) { + var count = 0; + if (r > 0) { + count += grid[r-1][c]; + } + if (r < grid.length-1) { + count += grid[r+1][c]; + } + if (c > 0) { + count += grid[r][c-1]; + } + if (c < grid.length[0]-1) { + count += grid[r][c+1]; + } + return count; +}; + + +var update_grid = function(grid) { + var count; + var nrows = grid.length; + var ncols = grid[0].length; + for (var r=0; r 2) { + grid[r][c] = 0; + } + if (grid[r][c] == 0 && count <= 2) { + grid[r][c] = 1; + } + } + } + return grid; +}; + + +var render_grid = fp.curry(function(ctx, grid) { + var height = ctx.canvas.height; + var width= ctx.canvas.width; + var nrows = grid.length; + var ncols = grid[0].length; + + ctx.clearRect(0, 0, width, height); + for (var r=0; r 0.8) ? 1:0; + } + } + console.log(grid); + return grid; +} + +//app("board", 500, grid0); +app("board", 500, random_grid(200, 200)); diff --git a/fp/fplib.js b/fp/fplib.js new file mode 100755 index 0000000..1ffe33c --- /dev/null +++ b/fp/fplib.js @@ -0,0 +1,27 @@ +"use strict"; + +var fp = { + curry, + compose, + pipe +}; + + +function curry(fn) { + return function(...args) { + if(fn.length > args.length) { + var arg = args; + return function(...args) {return fn.apply(null, arg.concat(args));}; + } + return fn.apply(null, args); + }; +} + +function compose(f,g) { + return function(...x) {return f(g(...x));} +} + +function pipe(...fns) { + return fns.reduce(compose); +} + diff --git a/fp/recording.gif b/fp/recording.gif new file mode 100644 index 0000000..f470b7d Binary files /dev/null and b/fp/recording.gif differ