Last active
May 2, 2016 16:13
Revisions
-
PaulMaynard revised this gist
May 2, 2016 . 1 changed file with 20 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,5 @@ /** * Eater.js version: 0.3.4 * Usage examples: * // Even squares of numbers between 1-100 * _(_.filter( x => x % 2 === 0, _.map(x => x * x, _.range(1, 100)))) @@ -84,8 +84,19 @@ Object.assign(eater, { get(it) { return it.next().value; }, taker(amt, it) { if(it == null) { it = amt; amt = 1; } return () => eater.take(amt, it); }, reduce(fun, val, it) { if(it == null) { return i => reduce(fun, val, i); } else { return reduce(fun, val, it) } }, /* Manipulators */ map(fun, it) { @@ -116,6 +127,12 @@ function* each(fun, it) { yield i; } } function reduce(fun, val, it) { for(let i of it) { val = fun(val, i); } return val } function* map(fun, it) { for(let i of it) { yield fun(i); -
PaulMaynard revised this gist
Nov 24, 2015 . 1 changed file with 29 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,29 @@ /** Sample die roller */ function die(pattern) { let [, sign = '+', amt = 1, sides = 6, num, mod] = die.regex.exec(pattern) let gen if (num) { gen = _.fill(Number(num)) } else { let die = _.func(() => Math.floor(Math.random() * sides) + 1) gen = _.combine(sum, ...Array(amt).fill(die)) } gen = _.map(die.signs[sign], gen) if(mod) { return _.combine(sum, gen, die(mod)) } else { return gen } } die.regex = /^([+-])?(?:(?:(\d*))?d(\d+)|(\d+))((?:[+-](?:(?:\d*d)?\d+|\d+))*)$/i die.signs = { '+': n => n, '-': n => -n, } function sum(a, ...b) { if (b.length) { return a + sum(...b) } else { return a } } -
PaulMaynard revised this gist
Nov 24, 2015 . 1 changed file with 5 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,5 @@ /** * Eater.js version: 0.3.3 * Usage examples: * // Even squares of numbers between 1-100 * _(_.filter( x => x % 2 === 0, _.map(x => x * x, _.range(1, 100)))) @@ -104,9 +104,9 @@ Object.assign(eater, { }, combine(fun, ...its) { if(its.length === 0) { return (...i) => combine(fun, i); } else { return combine(fun, ...its); } } }); @@ -131,7 +131,7 @@ function* filter(fun, it) { function* combine(fun, ...its) { while(true) { let results = its.map(i => i.next()); let done = results.every(r => r.done); if(done) { break; } else { @@ -140,4 +140,4 @@ function* combine(fun, ...its) { } } return eater; })(); -
PaulMaynard revised this gist
Nov 24, 2015 . 1 changed file with 18 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -101,6 +101,13 @@ Object.assign(eater, { } else { return filter(fun, it); } }, combine(fun, ...its) { if(its.length === 0) { return i => combine(fun, i) } else { return combine(fun, ...its) } } }); function* each(fun, it) { @@ -121,5 +128,16 @@ function* filter(fun, it) { } } } function* combine(fun, ...its) { while(true) { let results = its.map(i => i.next()); done = results.every(r => r.done); if(done) { break; } else { yield fun(...results.map(r => r.value)); } } } return eater; })(); -
PaulMaynard revised this gist
Nov 24, 2015 . 1 changed file with 17 additions and 17 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -16,7 +16,7 @@ function eater(it, ...args) { return eater.func(it, ...args); } else if(it[Symbol.iterator]) { if(typeof args[0] === 'number'|| args[0] instanceof Number) { return [...eater.take(args[0], it)]; } else { return [...it]; } @@ -34,7 +34,7 @@ Object.assign(eater, { if(end == null) { [start, end] = [1, start]; } for(let i = start; i <= end; i++) { yield i; } }, @@ -49,36 +49,36 @@ Object.assign(eater, { } }, *loop(it) { for(let i = 0; i < it.length; i++) { yield it[i]; } }, *pick(a) { while(true) { yield a[Math.floor(Math.random() * a.length)]; } }, *join(...its) { for(let it of its) { yield* it; } }, /* Accessors */ *take(amt, iter) { if(iter == null) { iter = amt; amt = Infinity; } let it = iter[Symbol.iterator] ? iter[Symbol.iterator]() : iter for(let i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value; } }, each(fun, it) { if(it == null) { return i => each(fun, i); } else { return each(fun, it); } }, get(it) { @@ -90,32 +90,32 @@ Object.assign(eater, { /* Manipulators */ map(fun, it) { if(it == null) { return i => map(fun, i); } else { return map(fun, it); } }, filter(fun, it) { if(it == null) { return i => filter(fun, i); } else { return filter(fun, it); } } }); function* each(fun, it) { for(let i of it) { fun(i); yield i; } } function* map(fun, it) { for(let i of it) { yield fun(i); } } function* filter(fun, it) { for(let i of it) { if(fun(i)) { yield i; } -
PaulMaynard revised this gist
Nov 23, 2015 . 1 changed file with 36 additions and 12 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,5 @@ /** * Eater.js version: 0.3.2 * Usage examples: * // Even squares of numbers between 1-100 * _(_.filter( x => x % 2 === 0, _.map(x => x * x, _.range(1, 100)))) @@ -74,28 +74,52 @@ Object.assign(eater, { yield n.value; } }, each(fun, it) { if(it == null) { return i => each(fun, i) } else { return each(fun, it) } }, get(it) { return it.next().value; }, taker(it) { return () => it.next().value; }, /* Manipulators */ map(fun, it) { if(it == null) { return i => map(fun, i) } else { return map(fun, it) } }, filter(fun, it) { if(it == null) { return i => filter(fun, i) } else { return filter(fun, it) } } }); function* each(fun, it) { for(var i of it) { fun(i); yield i; } } function* map(fun, it) { for(var i of it) { yield fun(i); } } function* filter(fun, it) { for(var i of it) { if(fun(i)) { yield i; } } } return eater; })(); -
PaulMaynard revised this gist
Nov 23, 2015 . 1 changed file with 19 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,25 +1,29 @@ /** * Eater.js version: 0.2.0 * Usage examples: * // Even squares of numbers between 1-100 * _(_.filter( x => x % 2 === 0, _.map(x => x * x, _.range(1, 100)))) * // 10 coin flips * _(_.pick([true, false]), 10) * // first 100 Fibonacci numbers (assuming already defined generator) * _(_.take(100, fibonacci())) * // Consume pseudo-array * _({0: 1, 1: 2, length: 2}) */ window._ = window.eater = (function(){'use strict'; function eater(it, ...args) { if(typeof it === 'function') { return eater.func(it, ...args); } else if(it[Symbol.iterator]) { if(typeof args[0] === 'number'|| args[0] instanceof Number) { return [...eater.take(args[0], it)] } else { return [...it]; } } else if(it.next) { return eater.take(it); } else if(typeof it.length === 'number') { return eater.loop(it); } else { return eater.fill(it); } @@ -49,6 +53,11 @@ Object.assign(eater, { yield it[i]; } }, *pick(a) { while(true) { yield a[Math.floor(Math.random() * a.length)] } }, *join(...its) { for(var it of its) { yield* it; -
PaulMaynard revised this gist
Sep 14, 2015 . 1 changed file with 0 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -14,8 +14,6 @@ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it === 'function') { return eater.func(it); } else if(typeof it.length === 'number') { return eater.loop(it); } else if(it[Symbol.iterator]) { -
PaulMaynard revised this gist
Sep 14, 2015 . 1 changed file with 0 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -14,8 +14,6 @@ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it === 'function') { return eater.func(it); } else if(it.next) { return eater.take(it); } else if(typeof it.length === 'number') { -
PaulMaynard revised this gist
Mar 18, 2015 . 1 changed file with 13 additions and 8 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,11 +1,12 @@ /** * Eater.js version: 0.2.0 * Usage examples: * // Even squares of numbers between 1-10 * _(_.filter( x => x % 2 === 0, _.map(x => x * x, _.range(1, 10)))) * // 10 coin flips * _(_.take(10, _.map(n => n < 0.5, _.func(Math.random)))) * // first 100 Fibonacci numbers (assuming already defined generator) * _(_.take(100, fibonacci())) * // Convert pseudo-array to array * _(_({ 0: 1, 1: 2, length: 2} )) */ @@ -58,13 +59,17 @@ Object.assign(eater, { } }, /* Accessors */ *take(amt, iter) { if(iter == null) { iter = amt; amt = Infinity } var it = iter[Symbol.iterator] ? iter[Symbol.iterator]() : iter for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value; } }, *each(fun, it) { for(var i of it) { fun(i); yield i; @@ -74,12 +79,12 @@ Object.assign(eater, { return it.next().value; }, /* Manipulators */ *map(fun, it) { for(var i of it) { yield fun(i); } }, *filter(fun, it) { for(var i of it) { if(fun(i)) { yield i; -
PaulMaynard revised this gist
Nov 18, 2014 . 1 changed file with 6 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -19,6 +19,10 @@ function eater(it) { return eater.take(it); } else if(typeof it.length === 'number') { return eater.loop(it); } else if(it[Symbol.iterator]) { return [...it]; } else if(it.next) { return eater.take(it); } else { return eater.fill(it); } @@ -54,8 +58,8 @@ Object.assign(eater, { } }, /* Accessors */ *take(iter, amt = Infinity) { var it = iter[Symbol.iterator]? iter[Symbol.iterator]() : iter for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value; } -
PaulMaynard revised this gist
Nov 17, 2014 . 1 changed file with 36 additions and 10 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,21 +1,33 @@ /** * Usage examples: * // Even squares of numbers between 1-10 * _(_.filter(_.map(_.range(1, 10), x => x * x), x => x % 2 === 0)) * // 10 coin flips * _(_.take(_.map(_.func(Math.random), n => n < 0.5), 10)) * // first 100 Fibonacci numbers (assuming already defined generator) * _(_.take(fibonacci(), 100)) * // Convert pseudo-array to array * _(_({ 0: 1, 1: 2, length: 2} )) */ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it === 'function') { return eater.func(it); } else if(it[Symbol.iterator]) { return [...it]; } else if(it.next) { return eater.take(it); } else if(typeof it.length === 'number') { return eater.loop(it); } else { return eater.fill(it); } } Object.assign(eater, { /* Creators */ *range(start = Infinity, end = null) { if(end == null) { [start, end] = [1, start]; } for(var i = start; i <= end; i++) { yield i; @@ -26,6 +38,11 @@ Object.assign(eater, { yield val; } }, *func(fn, ...args) { while(true) { yield fn(...args); } }, *loop(it) { for(var i = 0; i < it.length; i++) { yield it[i]; @@ -37,12 +54,21 @@ Object.assign(eater, { } }, /* Accessors */ *take(iter, amt) { var it = iter[Symbol.iterator]? iter[Symbol.iterator]() : iter; for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value; } }, *each(it, fun) { for(var i of it) { fun(i); yield i; } }, get(it) { return it.next().value; }, /* Manipulators */ *map(it, fun) { for(var i of it) { @@ -57,5 +83,5 @@ Object.assign(eater, { } } }); return eater; })(); -
PaulMaynard revised this gist
Nov 17, 2014 . 1 changed file with 11 additions and 9 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,17 +1,19 @@ /** * Example usage: _(_.filter(_.map(_.range(1, 10), x => x * x), x => x % 2 === 0)) // Even squares of numbers between 1-100 */ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it !== 'function' && typeof it.length === 'number') { return eater.loop(it); } else if(it[Symbol.iterator]) { return [...it]; } else if(it.next) { return eater.take(it) } }; Object.assign(eater, { /* Creators */ *range(start = Infinity, end) { if(end == null) { [start, end] = [0, start]; } @@ -26,19 +28,19 @@ Object.assign(eater, { }, *loop(it) { for(var i = 0; i < it.length; i++) { yield it[i]; } }, *join(...its) { for(var it of its) { yield* it; } }, /* Accessors */ *take(iter, amt = Infinity) { var it = iter[Symbol.iterator]? iter[Symbol.iterator]() : iter for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value; } }, /* Manipulators */ -
PaulMaynard revised this gist
Nov 17, 2014 . 1 changed file with 8 additions and 6 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -5,8 +5,10 @@ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it !== 'function' && typeof it.length === 'number') { return eater.loop(it); } else if(it[Symbol.iterator]) { return [...it]; } else if(it.next) { return eater.take(it) } }; Object.assign(eater, { @@ -26,19 +28,19 @@ Object.assign(eater, { }, *loop(it) { for(var i = 0; i < it.length; i++) { yield it[i]; } }, *concat(...its) { for(var it of its) { yield* it; } }, /* Accessors */ *take(iter, amt = Infinity) { var it = iter[Symbol.iterator]? iter[Symbol.iterator]() : it for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value; } }, /* Manipulators */ -
PaulMaynard revised this gist
Nov 17, 2014 . 1 changed file with 20 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -3,14 +3,14 @@ */ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it !== 'function' && typeof it.length === 'number') { return eater.loop(it); } else { return [...it]; } }; Object.assign(eater, { /* Creators */ *range(start, end) { if(end == null) { [start, end] = [0, start]; @@ -19,12 +19,29 @@ Object.assign(eater, { yield i; } }, *fill(val) { while(true) { yield val; } }, *loop(it) { for(var i = 0; i < it.length; i++) { yield it[i] } }, *concat(...its) { for(var it of its) { yield* it } }, /* Accessors */ *take(iter, amt) { var it = iter[Symbol.iterator]() for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value } }, /* Manipulators */ *map(it, fun) { for(var i of it) { yield fun(i); -
PaulMaynard revised this gist
Nov 17, 2014 . 1 changed file with 17 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,9 +1,16 @@ /** * Usage: _(_.filter(_.map(_.range(1, 10), x => x * x), x => x % 2 === 0)) // Even squares of numbers between 1-100 */ window._ = window.eater = (function(){'use strict'; function eater(it) { if(typeof it.length === 'number') { return it[Symbol.iterator](); } else { return [...it]; } }; Object.assign(eater, { *range(start, end) { if(end == null) { [start, end] = [0, start]; @@ -12,6 +19,12 @@ Object.assign(_, { yield i; } }, *take(iter, amt) { var it = iter[Symbol.iterator]() for(var i = 0, n; i < amt && !((n = it.next()).done); i++) { yield n.value } }, *map(it, fun) { for(var i of it) { yield fun(i); @@ -25,4 +38,5 @@ Object.assign(_, { } } }); return eater })(); -
PaulMaynard created this gist
Nov 17, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,28 @@ /** * Usage: _(_.filter(_.map(_.range(1, 10), x => x * x), x => x % 2 === 0)) // Even squares of numbers between 1-100 */ (function(){'use strict'; var _ = window._ = window.eater = it => [...it]; Object.assign(_, { *range(start, end) { if(end == null) { [start, end] = [0, start]; } for(var i = start; i <= end; i++) { yield i; } }, *map(it, fun) { for(var i of it) { yield fun(i); } }, *filter(it, fun) { for(var i of it) { if(fun(i)) { yield i; } } } }); })();