Сумма с каррированием

Medium
FunctionCurryingArguments

Напишите функцию sum, которая может принимать параметры двумя способами:

  1. Как обычные аргументы: sum(a, b, c, ...)
  2. Как каррированная функция: sum(a)(b)(c)...

Функция должна возвращать сумму всех переданных чисел в любом из этих форматов.

Примеры

sum(2, 3);      // 5
sum(1, 2, 3, 4); // 10
sum(2)(3);      // 5
sum(1)(2)(3)(4); // 10
sum(1, 2)(3);   // 6
sum(2)(3, 4);   // 9

Ограничения

  • Функция должна работать с любым количеством аргументов
  • Все аргументы являются числами
  • -1000 <= каждый аргумент <= 1000

Примеры

Пример 1
Вход:
sum(2, 3)
Выход:
5
Пример 2
Вход:
sum(1)(2)(3)(4)
Выход:
10
Пример 3
Вход:
sum(1, 2)(3)
Выход:
6
Ваш код - JavaScript
Результаты
Нажмите «Запуск» для выполнения кода