Введение
Давайте понаблюдаем за этот массив: [3, 2, 4, 1, 1, 5, 1, 2]
.
Каждый элемент отображает длину подстроки, которую необходимо суммировать. Давайте посмотрим на первый элемент вышеуказанного массива:
[3, 2, 4, 1, 1, 5, 1, 2]
^
Элемент в первом индексе равен 3 , поэтому теперь мы берем подстроку длины три с тем же индексом, что и в начальной позиции:
[3, 2, 4]
При суммировании это приводит к 9 , поэтому первый элемент из набора суммы подстрок равен 9
.
Мы делаем это для всех элементов в массиве:
3 -> [3, 2, 4]
2 -> [2, 4]
4 -> [4, 1, 1, 5]
1 -> [1]
1 -> [1]
5 -> [5, 1, 2]
1 -> [1]
2 -> [2]
Вы можете видеть, что число 5 немного странно. Это число превышает длину массива:
[3, 2, 4, 1, 1, 5, 1, 2]
^ ^ ^ ^ ^
Мы будем игнорировать все, что превышает массив, поэтому мы просто используем [5, 1, 2]
.
Последний шаг - подвести итог:
[3, 2, 4] -> 9
[2, 4] -> 6
[4, 1, 1, 5] -> 11
[1] -> 1
[1] -> 1
[5, 1, 2] -> 8
[1] -> 1
[2] -> 2
И это массив, который должен быть выведен:
[9, 6, 11, 1, 1, 8, 1, 2]
Задание
Если дан непустой массив с положительными (ненулевыми) целыми числами, выведите набор суммы подстрок . Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Контрольные примеры
[1, 2, 3, 4, 5] -> [1, 5, 12, 9, 5]
[3, 3, 3, 3, 3, 3, 3, 3] -> [9, 9, 9, 9, 9, 9, 6, 3]
[5, 1, 2, 4, 1] -> [13, 1, 6, 5, 1]
[1] -> [1]
Ответы:
Желе , 6 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Python, 40 байт
Проверьте это на Ideone .
источник
Excel, 21 байт
=SUM(OFFSET(A1,,,A1))
Откройте новую электронную таблицу, поместите тестовые значения в столбец A. Введите формулу в B1 и дважды щелкните маркер ячейки, чтобы перейти к диапазону.
источник
Python 3, 47 байт
Довольно простая реализация. Поведение Python по умолчанию для срезов, которые выходят за пределы списка, было очень удобным здесь.
источник
Haskell,
34, 33 байтаОдин байт, сохраненный Ними.
источник
JavaScript ES6, 50 байт
Довольно понятно. Он распространяется
map
на каждый элемент массива, получаяslice
из этогоi
ndex индекс, плюсe
значение этого элемента иreduce
добавляя.источник
J 11 байт
использование
объяснение
источник
JavaScript (ES6), 45
reduce
избили снова!источник
f=
, так же, как в этом ответе .f=
45 байтов уже не учитываютсяСетчатка , 38 байт
Количество байтов предполагает кодировку ISO 8859-1.
Вход и выход - разделенные запятыми списки.
Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
источник
Mathematica
6055 байтнапример
Спасибо @MartinEnder за то, что сбрил 5 байтов :)
источник
#+Tr@Take[x=Rest@x,UpTo[#-1]]&/@(x=#)&
все еще не уверен, что это оптимально, но это экономит 17 байтов.05AB1E,
118 байтобъяснение
Попробуйте онлайн
источник
Pyth , 8 байт
Тестирование.
Перевод ответа Эля на Python .
источник
Эрланг, 69 байт
Функции высшего порядка Эрланга для списков не получают индекс текущего элемента. Это использует словарь процесса, чтобы установить индекс текущего элемента.
источник
Пайк,
127 байтПопробуй это здесь!
источник
VBA, 160 байт
источник
Pyth, 6 байт
Тестирование
Это отличное решение от любых других. Он зацикливается на вводе, разделяя суммирование начальных значений, затем удаляя первый элемент сохраненного ввода, и повторяется.
Объяснение:
источник
Юлия, 39 байт
Попробуйте онлайн!
источник
F #,
8482 байтаисточник
JavaScript (ES6) - 79 байт
Рекурсивное решение, которое не использует ни один из методов Array:
Тестирование:
источник
C #, 89 байт
довольно прямо
идеи улучшения приветствуются
источник
Брахилог , 27 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
объяснение
источник
Дьялог АПЛ, 15 байт
или
источник
PHP программа, 72 байта
позвонить с
php-cgi -f <filename> 'a[]=3&a[]=2&a[]=4...
+11 как функция:
+9 без встроенных функций:
($ c сохраняет исходные значения, $ a ведет обратный отсчет для каждого индекса, $ r получает суммы)
-3 как программа:
источник
q (37 байт)
Пример:
источник
Матрицы , 25 байтов
Да, наконец, вызов, для которого мне не нужны новые функции!
Бежать с:
python matricks.py substring.txt [[<input>]] 0
Объяснение:
источник
Javascript (с использованием внешней библиотеки) (66 байт)
Ссылка на lib: https://github.com/mvegh1/Enumerable
Объяснение кода: _.From загружает входной массив в библиотеку, которая в основном является LINQ для js. Затем каждый элемент в массиве отображается в соответствии со следующим предикатом: взять входные данные, вырезать их из индекса текущего элемента и взять этот индекс плюс значение текущего элемента. Затем подведите итог этой подпоследовательности. Преобразовать результат в собственный массив JS и вернуть его
источник
var
из переменных, это не нужно в гольфе. Вы можете также изменить.forEach
на.map
который стоит меньше байт.Clojure, 63 байта
Использует сопоставление с образцом, чтобы разложить входной аргумент на первый и остальные аргументы.
источник
MATL ,
171413 байтобъяснение
Попробуйте онлайн! Или проверьте все контрольные примеры (код изменен для обработки нескольких входных данных).
источник
C #, 94 байта
Где a - это int [], представляющий входные данные для решения.
источник