У меня есть простой вызов для вас на этот раз. Учитывая массив положительных целых чисел A (или эквивалент на вашем языке), замените каждую запись A i суммой следующих элементов A i в A , возвращаясь назад с начала, если не хватает элементов.
Как обычно, вы можете соревноваться на любом языке программирования и можете принимать и выводить данные любым стандартным методом и в любом приемлемом формате, при этом отмечая, что эти лазейки по умолчанию запрещены. Вы можете дополнительно взять размер А в качестве входных данных тоже. Это код-гольф , поэтому выигрывает самое короткое представление (в байтах) для каждого языка .
Примеры / Тестовые случаи
Учитывая [1,3,4,5]
, что ваш код должен вывести [3,10,13,14]
, так как 1
заменяются 3
, 3
заменяются 4+5+1=10
(заметьте , как он завернутым назад с самого начала), с 4
помощью 5+1+3+4=13
и с 5
помощью 1+3+4+5+1=14
.
Учитывая [3,2,1,9]
, ваша программа должна производить [12,10,9,33]
, потому что мы заменяем 3
с 2+1+9=12
, 2
с 1+9=10
, 1
с 9
и 9
с 3+2+1+9+3+2+1+9+3=33
(обратите внимание, как мы завернули с самого начала более чем один раз).
Еще несколько тестов для вас на выбор:
[4,3,2,1] -> [10,7,5,4]
[3,2,1,9] -> [12,10,9,33]
[1,3,4,5] -> [3,10,13,14]
[4,4,3,2,2] -> [11,11,8,6,8]
[3,5,3,2,1] -> [10,14,6,4,3]
[3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3]
[7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30]
[28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34]
[1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]
источник
+
в конце). Кроме того, может быть, ты будешь ниндзя в следующий раз. :)Python , 55 байт
Попробуйте онлайн!
источник
~
оператор не является побитовым, он фактически сокращен-1-v
, поэтому-~v
сокращен для-(-1-v)
которого просто1+v
(но избегает таких скобок, как(1+v)*a
). Во-вторых, в Python можно умножить список на целое число, чтобы повторить его (например,['a','b']*3
есть['a','b','a','b','a','b']
).-~v*a
Может быть замененa+v*a
на тот же счетчику байтов. Наконец,[i:i+v]
это индексация фрагмента, сохраняющая элементыi
толькоi+v-1
(0-indexed).J, 33 байта
ungolfed
объяснение
Попробуйте онлайн!
источник
C (gcc) ,
8685 байтПопробуйте онлайн!
источник
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 байтаПопробуйте онлайн!
источник
05AB1E ,
87 байтПопробуйте онлайн!
объяснение
источник
K4 / K (ок) ,
2019 байтовРешение:
Попробуйте онлайн!
Примеры:
Объяснение:
Измените ввод, отбросьте сначала, возьмите х длину каждого, суммируйте.
источник
Желе , 7 байт
Попробуйте онлайн!
источник
Атташе , 26 байт
Попробуйте онлайн!
объяснение
Это форк двух функций:
{Sum=>_[(_2+1:_)%#_]}
Iota
Это означает, что правый зуб
Iota
применяется к аргументуx
и передается в качестве второго аргумента центральному зубцу (первая функция). Таким образом, это становится для вводаx
:Замена тех, кто в течение
_
и_2
:Iota[x]
возвращает массив индексовx
. Это эквивалентно0...#x
.#x
это короткий способ сказать размерx
илиSize[x]
. По сути, эта функция отображаетSum
функцию на второе выражение:Внешний
x[...]
бит означает, что...
будет сгенерирован ряд индексов для выбораx
. Наиболее важной частью генерации индексов является следующее:Это выражение использует немного векторизации. Чтобы визуализировать это, давайте предположим, что ввод
x := [1, 3, 4, 5]
. Тогда это выражение эквивалентно:Это список индексов, которые представляют собой индексы следующих
N
элементов вx
моде#x
. Чтобы сделать их безопасными для поиска, мы возьмем этот мод массива#x
:Это дает нам правильные индексы, которые затем получаются,
x
и каждый массив суммируется, давая правильные результаты.Другие попытки
36 байт:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- Я забылx[...]
полностью векторизовать, так что становится:30 байт:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- но потом я понял, что_2+
внутренний диапазон может быть учтен, что означает, что мы могли бы сохранить скобки, используя:
вместо..
, давая нам текущую версию.источник
R ,
8964 байтаПопробуйте онлайн!
Основная идея заключается в том, чтобы сгенерировать циклический индексный вектор, который достаточно длинный, вы можете использовать для получения необходимых элементов из входного вектора.
Оригинальная версия:
Попробуйте онлайн!
источник
R ,
6258 байтПопробуйте онлайн!
Альтернатива другого решения R . В комментариях JayCe упомянул о том,
cumsum
что вызвало что-то в моем мозгу для использованияdiffinv
и переработки матрицы вместоrep
.Объяснение:
Учитывая входной массив
a
, пустьM=max(a)
иl=length(a)
.Заметим , что
M+l
максимально возможный индекс , мы должны были бы получить доступ, и чтоM+l<=M*l+1
, так как еслиM,l>1
,M+l<=M*l
(с равенством только тогда , когдаM=l=2
) , а еслиl==1
иM==1
, тоM+l==M*l+1
.В качестве примера, пусть
a=c(4,3,2,1)
. ПотомM=l=4
.Построим
M*l+1 x l
матрицу в R с помощьюmatrix(a,max(a)*l+1,l)
. Поскольку R перезаписываетсяa
в главном порядке столбцов, мы получаем матрицу, повторяющую элементыa
как таковые:Каждый столбец представляет циклические наследники каждого элемента
a
, сa
поперек первой строки; это связано с тем, что R повторяет свои аргументы в матрице.Далее мы берем обратную «производную» с
diffinv
, по существу, совокупной суммой каждого столбца с дополнительным0
в качестве первой строки, генерируя матрицуВ первом столбце запись
6=4+2
равна14=4 + (3+2+1+4)
, что является суммой циклического преемника (CSS) плюс ведущий4
. Аналогично, во втором столбце запись5=3+2
равна10=3 + (4+1+2)
и т. Д.Таким образом , в столбце
i
, тоa[i]+2
й вход равноCSS(i)+a[i]
. Следовательно, мы берем строки, проиндексированные сa+2
помощью квадратной матрицы:Элементы по диагонали равны сумме циклического преемника плюс
a
, поэтому мы извлекаем диагональ и вычитаемa
, возвращая результат в виде суммы циклического преемника.источник
Map
, и первоначально это было как 68 байтов, прежде чем я понял, что я мог бы взятьl
в качестве входных данных!Pyth,
1311 байтСохранено 2 байта благодаря Mr. Xcoder.
Попробуй здесь
объяснение
источник
Древесный уголь , 12 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
JavaScript ES6, 65 байт
Простое решение. Ungolfed:
map()
Функция JavaScript идеально подходит для работы, она запускает данный обратный вызов для каждого элемента и заменяет его результатом обратного вызова. Обратный вызов получает два параметра, первыйx
- значение, а второйy
- индекс. Взяв модуль,i % a.length
мы можем легко зациклить массив, несколько раз, если это необходимо.Тестовый фрагмент
(Поместите ввод в виде записи в формате JSON)
Показать фрагмент кода
источник
Java 8, 87 байт
Каррированная пустота лямбда, берущая
int[]
список иint
длину.Попробуйте онлайн . Обратите внимание, что я затенял
System.out
в этой программе, чтобы получить результаты для более красивой печати.источник
Юлия 0,6 ,
635553 байтаПопробуйте онлайн!
Старое решение:
Юлия 0,65 байт
Попробуйте онлайн!
Другое решение Bytecount не очень хорош, но мне это нравится, и, вероятно, он более эффективен, чем два других, особенно если на входе большие цифры.
Юлия 0,6 , 69 байт
Попробуйте онлайн!
источник
Холст , 10 байт
Попробуй это здесь!
Объяснение:
источник
QBasic 1.1 , 115 байт
Первый вход - это длина L , затем L, последующие входы - это элементы по порядку. L выходы представляют результирующий массив с элементами в том порядке, в котором они представлены.
источник
Japt, 7 байт
Попробуй здесь
источник
APL + WIN, 37 байт
Подсказки для ввода:
Попробуйте онлайн! Предоставлено Dyalog Classic
Объяснение:
источник
Рубин , 38 байт
Попробуйте онлайн!
источник
JavaScript, 65 байтов 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
golfed
ungolfed
Попробуйте онлайн!
(версия без игры в гольф выше) Я новичок в этой штуке с Codegolf!
* Обновлен! Благодаря полезным ссылкам, приведенным в комментариях, мне удалось уменьшить размер до 65 байт!
источник
n
), которую мы не разрешаем. Добро пожаловать в PPCG, хотя :)Perl 5 с
-M5.010
, 42 байтаПопробуйте онлайн!
источник
JavaScript, 46 байт
Попробуйте онлайн
источник
Cjam, 23 байта
Попробуйте онлайн!
источник
Пип
-rn
, 14 байтПринимает входные числа в последовательных строках стандартного ввода; дает выходные числа на последовательных строках stdout. Попробуйте онлайн!
объяснение
Или, используя проработанный пример:
источник
APL (Dyalog Classic) , 12 байт
Попробуйте онлайн!
использования
⎕io←1
источник
Perl 6 ,
5032 байтаПопробуйте онлайн!
Я новичок в гольф в Perl 6, так что я уверен, что это может быть короче.Больше не новинка, и вернемся к этому гольфу!источник