const cartesianToPolar = ({x, y}) => ({r: Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), t: Math.atan2(y, x)}) const polarToCartesian = ({r, t}) => ({x: r * Math.cos(t), y: r * Math.sin(t)}) const findMemory = (mem) => { let originalSnap = Object.assign({}, Array.from(mem)) let snap = Object.assign({}, Array.from(mem)) let criteria = () => true let finalCriteria = () => true const check = () => { for (let key of Object.keys(snap)) { if (!criteria(mem[key], snap[key])) delete snap[key] else snap[key] = mem[key] } return o } const result = () => { console.log( Object.keys(snap) .filter(x => finalCriteria(snap[x], originalSnap[x])) .map(x => `0x${x.toString(16).padStart(4, '0')}`) ) } const setCriteria = (c, f) => { criteria = c finalCriteria = f return o } const o = { with: c => setCriteria(c), increasing: () => setCriteria((a, b) => a >= b, (a, b) => a > b), decreasing: () => setCriteria((a, b) => a <= b, (a, b) => a > b), static: () => setCriteria((a, b) => a === b, () => true), check, result } return o } module.exports = { cartesianToPolar, polarToCartesian, findMemory }