JavaScriptでsum, concat, maximum, inits, tails, ...
JavaScriptにはsumとか標準でないようですね。なにか見落としているのかな、、、。
- 合計
var sum = function(xss){return xss.reduceRight(function(acc, v){return acc + v;},0);}; undefined sum([1,2,3]); 6
- 最大
var maximum = function(xss) {return xss.reduceRight(function(acc,v){return acc > v ? acc :v;});} undefined maximum([1,2,3]); 3
- 連結(cancatとかぶるのでアンスコをつけた)
var concat_ = function(xss){return Array.concat.apply([], xss);}; undefined concat_([[1],[2],[3]]); Array [ 1, 2, 3 ]
- 配列を先頭から順に配列としてとる
var inits = function(xss){return xss.reduceRight(function(acc, v){return [[]].concat(acc.map(function(v1){return [v].concat(v1);}))},[[]]);} undefined inits([1,2,3]); Array [ Array[0], Array[1], Array[2], Array[3] ]
- 配列を後ろから順に配列としてとる
var tails = function(xss){return xss.reduceRight(function(acc, v){return [[v].concat(acc[0])].concat(acc);},[[]])}; undefined tails([1,2,3]); Array [ Array[3], Array[2], Array[1], Array[0] ]
- 配列の連続した部分をとる
var segs = function(xss){return concat_(tails(xss).map(inits));}; undefined segs([1,2,3]); Array [ Array[0], Array[1], Array[2], Array[3], Array[0], Array[1], Array[2], Array[0], Array[1], Array[0] ]
- 配列の連続した部分の合計の最大値を求める
maximum(segs([2,-3,4,-1,3]).map(sum)); 6