(CPU) Efficient List Summing via streams

node v4.9.1
version: 1.0.0
endpointsharetweet
const stream = require('mithril/stream') const scan = require('mithril/stream/scan') const R = require('ramda') var initialList = R.range(0, 10000) var inserts = stream() // the list is just the sum of all inserts var list = scan(function(list, { index, value }){ return [].concat( list.slice(0, index), value, list.slice(index+1) ) }, initialList, inserts ) // we need to store the previous list // to obtain the old value in the sum stream var pairs = scan(R.pipe( R.flip(R.append) ,R.takeLast(2) ), [initialList, initialList], list ) var prevList = pairs.map(R.head) var sum = scan(function(sum, [list, { index, value }]){ const oldValue = list[index] || 0 return sum - oldValue + value }, R.sum( initialList), stream.merge([ prevList, inserts ]) ) null
const sums = scan( R.flip( R.append ), [], sum.map( R.of )) // sum=49995000 inserts({ index: 5000, value: 5000 }) //sum = 49995000 inserts({ index: 5000, value: 0 })//sum = 49990000 inserts({ index: 5000, value: 0 })//sum = 49990000 inserts({ index: 0, value: 1 }) //sum = 49990001 sums().join(', ')
Loading…

no comments

    sign in to comment