Мы собираемся сложить список целых чисел. Процедура для этого заключается в следующем: если список имеет четную длину, составьте список из половины его длины, где n-й элемент нового списка представляет собой сумму n-го элемента старого списка и n-го до последний пункт старого списка. Например, если бы у нас был список
[1 2 3 4 5 6 7 8]
Мы бы сложили это так
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Если список имеет нечетную длину, чтобы сложить его, мы сначала удаляем средний элемент, складываем его, как если бы он был четным, и добавляем средний элемент к результату.
Например, если бы у нас был список
[1 2 3 4 5 6 7]
Мы бы сложили это так
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
задача
Напишите программу или функцию, которая принимает список целых чисел в качестве входных данных и выводит их в сложенном виде.
Это вопрос по коду-гольфу, поэтому ответы будут оцениваться в байтах, при этом меньшее количество байтов будет лучше.
Пример реализации
Вот реализация в Haskell, которая определяет функцию, f
которая выполняет свертывание.
f(a:b@(_:_))=a+last b:f(init b)
f x=x
источник
Ответы:
Python , 46 байт
Попробуйте онлайн!
Одинаковая длина:
Гораздо более короткое решение работает для списков четной длины (30 байт)
Попробуйте онлайн!
Я все еще пытаюсь найти короткий способ исправить это для нечетной длины.
источник
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
также имеет ту же длину ...05AB1E , 5 байтов
Код
Использует кодировку 05AB1E . Попробуйте онлайн!
объяснение
источник
Эмоджикод , 203 байта
Это был самый болезненный ответ Emojicode на код для меня. Ненужная длина: /
Попробуйте онлайн!
источник
Japt ,
211816 байтПроверьте это онлайн!
Совершенно ужасноЧуть менее ужасно благодаря @Oliver . BRB после того, как я внедрил больше встроенных модулей и исправил некоторые ошибки ...источник
Gaia , 7 байт
объяснение
источник
Mathematica, 88 байт
источник
Mathematica 57 байт
Вставляет ноль в средней точке, добавляет список к его обратному и принимает соответствующую длину.
источник
Japt , 12 байт
Попробуйте онлайн! с
-Q
флагом для просмотра отформатированного массива.Альтернативный раствор, 14 байтов
Попробуйте онлайн!
источник
Желе , 7 байт
Попробуйте онлайн!
-2 благодаря ETHproductions ... и я понял раньше.
источник
JavaScript (Node.js) , 53 байта
Попробуйте онлайн!
Еще одно предложение:
JavaScript (Node.js) , 43 байта
Попробуйте онлайн!
источник
R ,
81706857 байтПопробуйте онлайн!
анонимная функция; возвращает результат.
источник
Python 3 , 101 байт
Попробуйте онлайн!
источник
Python 3 , 70 байт
Попробуйте онлайн!
источник
JavaScript,
7571 байтПопробуйте онлайн
Сохранено 2 байта благодаря ETHproductions
источник
JavaScript (ES6), 41 байт
Показать фрагмент кода
источник
MATL , 9 байт
Попробуйте онлайн!
Как это работает
Учитывая массив
[a b c ... x y z]
, пусть[a z]
будет называться «корочка» подмассив и[b c ... y z]
«ядро» подмассив.Код состоит из цикла, который удаляет корку, вычисляет ее сумму и перемещает ядро на вершину стека, готовое к следующей итерации. Условие цикла - это количество элементов в подмассиве ядра.
источник
WendyScript , 72 байта
Попробуйте онлайн!
источник
C # (.NET Core) ,
118111 байтовКоличество байтов также включает в себя
Попробуйте онлайн!
В качестве входных данных используйте числа, разделенные запятыми (
,
) или пробелом. Объяснение:источник
Perl,
4238 символовsub f {@ a = map {$ + pop} splice @ , 0, @ / 2; @ a, @ }Попробуйте, например, так:
источник
Pyth,
181713 байтовМой оригинальный подход был
-1 байт благодаря мистеру Xcoder
-4 байта благодаря FryAmTheEggman
источник
c2<list>
чтобы разделить список пополам. Еще одна команда , которая может быть полезна.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 байтКак и безымянная лямбда, принимая контейнер как
vector
илиlist
, возвращается через изменение ввода:Использование хорошо известного оператора «переход»
<--
и тройной плюс+++
Ungolfed и пример:
источник
J , 22 байта
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 21 байт SBCS
-3 байта благодаря @ Adám.
Попробуйте онлайн!
Объяснение:
источник
+⌿(⌊2÷⍨≢)(↑↑⍮⌽⍤↓)⊢
(⌊2÷⍨≢)(↑{+⌿↑⍺⍵}∘⌽↓)⊢
`Common Lisp, 106 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 62 байта
Попробуйте онлайн!
источник
-i-1
на,+~i
чтобы сохранить байт.c!=i
сc>i
байтом.Scala, 91 байт
источник
Математика , 52
источник
JavaScript (ES6),
4643 байтаПоказать фрагмент кода
Сохранено 3 байта с вдохновением от Асафа .
источник
c+c
работает для третьего байта.Java 8, 93 байта
Двойные цифры! Это лямбда, которая принимает
int[]
и возвращаетint[]
.Неуправляемая лямбда
Довольно просто. Он сворачивает вторую половину на первой половине ввода и возвращает копию только первой половины.
Удивительно, но копия массива в операторе return кажется самым дешевым способом обработки причуды последнего элемента для входных данных нечетной длины.
источник
PHP , 67 байт
Попробуйте онлайн!
источник