38 lines
		
	
	
		
			1000 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1000 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Thanks for hints: https://github.com/paulmillr/es6-shim
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var some = Array.prototype.some
 | |
|   , abs = Math.abs
 | |
|   , sqrt = Math.sqrt
 | |
|   , compare = function (val1, val2) { return val2 - val1; }
 | |
|   , divide = function (value) { return value / this; }
 | |
|   , add = function (sum, number) { return sum + number * number; };
 | |
| 
 | |
| // eslint-disable-next-line no-unused-vars
 | |
| module.exports = function (val1, val2/*, …valn*/) {
 | |
| 	var result, numbers;
 | |
| 	if (!arguments.length) return 0;
 | |
| 	some.call(arguments, function (val) {
 | |
| 		if (isNaN(val)) {
 | |
| 			result = NaN;
 | |
| 			return false;
 | |
| 		}
 | |
| 		if (!isFinite(val)) {
 | |
| 			result = Infinity;
 | |
| 			return true;
 | |
| 		}
 | |
| 		if (result !== undefined) return false;
 | |
| 		val = Number(val);
 | |
| 		if (val === 0) return false;
 | |
| 		if (numbers) numbers.push(abs(val));
 | |
| 		else numbers = [abs(val)];
 | |
| 		return false;
 | |
| 	});
 | |
| 	if (result !== undefined) return result;
 | |
| 	if (!numbers) return 0;
 | |
| 
 | |
| 	numbers.sort(compare);
 | |
| 	return numbers[0] * sqrt(numbers.map(divide, numbers[0]).reduce(add, 0));
 | |
| };
 |