18.11.2015, 16:53
|
Профессор
|
|
Регистрация: 03.11.2014
Сообщений: 263
|
|
ksa,
да та)
|
|
18.11.2015, 21:28
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Mess4me,
valueOf
|
|
18.11.2015, 21:51
|
Профессор
|
|
Регистрация: 03.11.2014
Сообщений: 263
|
|
tsigel,
а без valueOf?
|
|
19.11.2015, 00:02
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от Mess4me
|
tsigel,
а без valueOf?
|
а разве это было в задании ?
function sum() {
var currentSum = getSum(arguments);
function fn() {
currentSum += getSum(arguments);
return fn;
}
function getSum(args) {
var argSum = 0;
for (var i = 0; i <args.length; i++) {
argSum += args[i]
};
return argSum;
}
fn.toString = fn.valueOf = function() {
return currentSum;
};
return fn;
}
alert( 'sum(2, 5, 10) = ' + sum(2, 5, 10) + "\n"
+ 'sum(2, 5)(10) = ' + sum(2, 5)(10) + "\n"
+ 'sum(2)(5)(10) = ' + sum(2)(5)(10) + "\n"
+ 'sum(2)(5, 10) = ' + sum(2)(5, 10));
Если количество вызываемых аргументов равно 3
function sum() {
var currentSum = getSum(arguments);
function fn() {
currentSum += getSum(arguments);
return checked(arguments.length);
}
function getSum(args) {
var argSum = 0;
for (var i = 0; i < args.length; i++) {
argSum += args[i]
}
return argSum;
}
function checked(col) {
fn.arg = fn.arg || 0;
fn.arg += col;
return fn.arg == 3 ? currentSum : fn;
}
return checked(arguments.length);
}
alert( 'sum(2, 5, 10) = ' + sum(2, 5, 10) + "\n"
+ 'sum(2, 5)(10) = ' + sum(2, 5)(10) + "\n"
+ 'sum(2)(5)(10) = ' + sum(2)(5)(10) + "\n"
+ 'sum(2)(5, 10) = ' + sum(2)(5, 10));
Последний раз редактировалось Vlasenko Fedor, 19.11.2015 в 04:03.
|
|
19.11.2015, 04:27
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Еще вариант
function sum() {
var res;
sum.res = sum.res || 0;
sum.arg = sum.arg || 0;
sum.arg += arguments.length;
for (var i = 0; i < arguments.length; i++) sum.res += arguments[i];
if(sum.arg == 3){
res = sum.res;
sum.arg = sum.res = 0;
}else{
res = sum;
}
return res;
}
alert( 'sum(2, 5, 10) = ' + sum(2, 5, 10) + "\n"
+ 'sum(2, 5)(10) = ' + sum(2, 5)(10) + "\n"
+ 'sum(2)(5)(10) = ' + sum(2)(5)(10) + "\n"
+ 'sum(2)(5, 10) = ' + sum(2)(5, 10));
|
|
19.11.2015, 12:47
|
Профессор
|
|
Регистрация: 03.11.2014
Сообщений: 263
|
|
Poznakomlus,
шикарные решения , особенно последнее Молодец
Интересная задачка на собеседовании, неправда ли?
Предпоследнее тоже понравилось , хотя чуть чуть запутанное для меня )
|
|
20.11.2015, 10:07
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,230
|
|
Сообщение от Mess4me
|
Интересная задачка на собеседовании, неправда ли?
|
По-мне так фигня полная...
|
|
13.01.2016, 23:40
|
Профессор
|
|
Регистрация: 30.12.2015
Сообщений: 194
|
|
А рабоче-крестьянский вариант засчитывается?
var sum = function() {
var args = arguments,
lenArgs = args.length;
if (lenArgs == 3) return args[0] + args[1] + args[2];
if (lenArgs == 2) {
return function(c) { return args[0] + args[1] + c; }
}
if (lenArgs == 1) {
return function() {
if (arguments.length == 1){
var b = arguments[0];
return function(c) { return args[0] + b + c; }
} else {
return args[0] + arguments[0] + arguments[1];
}
}
}
}
alert( 'sum(2, 5, 10) = ' + sum(2, 5, 10) + "\n"
+ 'sum(2, 5)(10) = ' + sum(2, 5)(10) + "\n"
+ 'sum(2)(5)(10) = ' + sum(2)(5)(10) + "\n"
+ 'sum(2)(5, 10) = ' + sum(2)(5, 10));
Последний раз редактировалось Keramet, 13.01.2016 в 23:44.
|
|
14.01.2016, 14:23
|
Профессор
|
|
Регистрация: 23.09.2014
Сообщений: 197
|
|
ребята у вас в решениях проблема , если передать 0 он все ломает
function sum () {
var len = 0, sum = 0;
return function fn () {
for(var i = 0, a = arguments; i < a.length && len < 3; i++) (sum+= a[i]*1, a[i] !== '') && (len+=1);
return (len == 3) ? sum : fn;
}.apply(this, [].join.call(arguments, ',').split(','));
}
alert(sum(2, 5, 10)+ "\n"+
sum(2, 5)(10)+ "\n"+
sum(2)(5)(10)+ "\n"+
sum(2)(5, 10)+ "\n"+
sum()(2)(5)(10)+ "\n"+
sum(0)(10)(7));//17
Последний раз редактировалось caetus, 14.01.2016 в 15:03.
|
|
14.01.2016, 15:57
|
Профессор
|
|
Регистрация: 04.02.2012
Сообщений: 196
|
|
У вас у всех сломается на не озвученном тут примере:
console.log(sum(2, 5));
во всяком случае решения caetus и Poznakomlus выводят в консоль объект функции) я понимаю - в задаче этого не было озвучено, но мы же понимаем что логика универсальной функции сложения тут ломается)
|
|
|
|