Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 59

LeetCode 682. Baseball Game

10.04.2022, 21:11. Показов 445. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте, решил задачку через forEach, а через reduce никак не получается додуматься.
Абсолютно стандартное решение.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const calPoints = function (ops) {
  const stack = [];
 
  ops.forEach((op) => {
    if (op === '+') {
      stack.push(stack[stack.length - 1] + stack[stack.length - 2]);
    } else if (op === 'D') {
      stack.push(2 * stack[stack.length - 1]);
    } else if (op === 'C') {
      stack.pop();
    } else {
      stack.push(parseInt(op));
    }
  });
 
  return stack.reduce((a, b) => a + b, 0);
};
Была мысль реализовать что-то вроде
JavaScript
1
2
3
const calPoints = function (ops) {
  return ops.reduce().reduce((a, b) => a + b, 0)
};
или вообще

JavaScript
1
const calPoints = (ops) => ops.reduce().reduce((a, b) => a + b, 0);
Чисто, чтобы ссылочная прозрачность была, но как завернуть этот forEach в reduce так и не могу додуматься(

Добавлено через 21 минуту
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const calPoints = function (ops) {
 
  return ops.reduce((arrayScore, token) => {
    if (token === '+') {
      arrayScore.push(arrayScore[arrayScore.length - 1] + arrayScore[arrayScore.length - 2]);
        return arrayScore
    } else if (token === 'D') {
      arrayScore.push(2 * arrayScore[arrayScore.length - 1]);
        return arrayScore
    } else if (token === 'C') {
      arrayScore.pop();
        return arrayScore
    } else {
      arrayScore.push(parseInt(token));
        return arrayScore
    }
  }, []).reduce((a, b) => a + b, 0);
};
Из-за особенности работы `push` пришлось везде наставить `return`. Можно ли это сделать более элегантным способом?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2022, 21:11
Ответы с готовыми решениями:

Аргон массой 682 г был изобарически нагрет
Аргон массой 682 г был изобарически нагрет так, что объём его увеличился в 3 раза, затем газ был изохорически охлаждён так, что давление...

LeetCode Online Judge: Maximum Product Subarray
Дан числовой список. Найти непрерывную последовательность, произведение элементов которой яляется наибольшим.

Clojure LeetCode Online Judge: Maximum Gap
Дан список положительных целых чисел. Найти максимальную разницу между последовательными элементами в отсортированном списке. Вернуть 0,...

2
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3954 / 2067 / 830
Регистрация: 13.03.2010
Сообщений: 6,818
10.04.2022, 21:13
Цитата Сообщение от Orkimed Посмотреть сообщение
Можно ли это сделать более элегантным способом?
Поставить return после всех условий или переписать на switch.
1
0 / 0 / 0
Регистрация: 30.09.2015
Сообщений: 59
10.04.2022, 21:15  [ТС]
gogolik,

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const calPoints = function (ops) {
 
  return ops.reduce((arrayScore, token) => {
    if (token === '+') {
      arrayScore.push(arrayScore[arrayScore.length - 1] + arrayScore[arrayScore.length - 2]);
    } else if (token === 'D') {
      arrayScore.push(2 * arrayScore[arrayScore.length - 1]);
    } else if (token === 'C') {
      arrayScore.pop();
    } else {
      arrayScore.push(parseInt(token));
    }
      return arrayScore
  }, []).reduce((a, b) => a + b, 0);
};
А есть ли что-то вроде максимально идиоматическое решение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2022, 21:15
Помогаю со студенческими работами здесь

Clojure LeetCode Online Judge: Largest Number
Дан список положительных целых чисел. Организовать их так, чтобы они образовали наибольшее число. Например, если дан список (3 30 34 5 9),...

Clojure LeetCode Online Judge: Find Peak Elements
Вернуть номера пиковых элементов числового списка (пиковым является элемент, который больше, чем соседние элементы).

Clojure LeetCode Online Judge: Reverse Words in a String
Определить функцию, меняющую порядок слов в предложении на обратный.

СМА GORENJE WA-25 S замена модуля, Совместимость модулей AKO 546 682 и 546 544
Господа, (машина Gorenje WA-25S art.№ 605036) старый модуль сгорел покруче, чем в предыдущей теме, хозяева согласились на замену, УБЛ...

Game порт. или не Game порт
Добрый день! Конструирую свой игровой девайс (корабельный штурвал). Суть - вращаемый вал, непосредственно над ним лазерная мышь. С...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru