Skip to content

Instantly share code, notes, and snippets.

Created November 27, 2012 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/4155038 to your computer and use it in GitHub Desktop.
Save anonymous/4155038 to your computer and use it in GitHub Desktop.
var arr = [2,4,1,4,1,2],
min = function(values){ return Math.min.apply(null, values); },
max = function(values){ return Math.max.apply(null, values); },
minValue = min(arr),
maxValue = max(arr),
extremeIdxsOfMinValue = [arr.indexOf(minValue), arr.lastIndexOf(minValue)],
extremeIdxsOfMaxValue = [arr.indexOf(maxValue), arr.lastIndexOf(maxValue)],
minIdxOfMinValue = min(extremeIdxsOfMinValue),
maxIdxOfMinValue = max(extremeIdxsOfMinValue),
minIdxOfMaxValue = min(extremeIdxsOfMaxValue),
maxIdxOfMaxValue = max(extremeIdxsOfMaxValue),
leftIdx = min([minIdxOfMinValue, maxIdxOfMinValue, minIdxOfMaxValue, maxIdxOfMaxValue]),
rightIdx = max([minIdxOfMinValue, maxIdxOfMinValue, minIdxOfMaxValue, maxIdxOfMaxValue]);
if(~[minIdxOfMinValue, maxIdxOfMinValue].indexOf(leftIdx) && ~[minIdxOfMinValue, maxIdxOfMinValue].indexOf(rightIdx)){
rightIdx = maxIdxOfMaxValue;
}
if(~[minIdxOfMaxValue, maxIdxOfMaxValue].indexOf(leftIdx) && ~[minIdxOfMaxValue, maxIdxOfMaxValue].indexOf(rightIdx)){
rightIdx = maxIdxOfMinValue;
}
var sum = arr.slice(leftIdx,rightIdx+1).reduce(function(acc, el){
return acc+el;
}, 0);
var product = arr.slice(0, leftIdx).concat(arr.slice(rightIdx+1)).reduce(function(acc,el){
return acc*el;
}, 1)
console.log(sum, product);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment