Я прокручивал этот сайт какое-то время, но совсем недавно заинтересовался попыткой решения некоторых проблем. Я собирался попробовать свои силы в некоторых из существующих тем, посвященных коду для игры в гольф, но вчера у меня не было доступа к Интернету, а тем временем я решил свой собственный вызов.
Ваша задача состоит в том, чтобы создать программу или функцию, которая принимает массив a
чисел с плавающей точкой и целое число n
, а затем устанавливает для каждого значения a
среднее из двух значений рядом, n
раз. При многократном использовании с увеличением значений n
это создает волнообразное движение:
Особенности:
- Если в нем присутствует только один элемент
a
или еслиn
0 или меньше, программа должна вернуть исходный массив. - Входы и выходы могут быть в любом формате, который вы пожелаете, если они явно разделены.
Для каждого шага:
- Первый элемент в
a
должен стать средним для себя, а следующий элемент. - Последний элемент
a
должен стать средним значением самого себя и предыдущего элемента. - Любой другой элемент
a
должен стать средним по предыдущему и следующему элементу. - Убедитесь, что вы рассчитываете массив предыдущего шага, а не текущий!
Контрольные примеры: ПРИМЕЧАНИЕ. Ваши входы / выходы не обязательно должны быть в этом формате!
[0, 0, 1, 0, 0], 1 -> [0, 0.5, 0, 0.5, 0]
[0, 0, 1, 0, 0], 2 -> [0.25, 0, 0.5, 0, 0.25]
[0, 0, 1, 0, 0], 0 -> [0, 0, 1, 0, 0]
[0, 0, 1, 0, 0], -39 -> [0, 0, 1, 0, 0]
[0, 16, 32, 16, 0], 1 -> [8, 16, 16, 16, 8]
[0, 1, 2, 3, 4, 5], 1 -> [0.5, 1, 2, 3, 4, 4.5]
[0, 64], 1 -> [32, 32]
[0], 482 -> [0]
[32, 32, 32, 16, 64, 16, 32, 32, 32], 4 -> [33, 27, 40, 22, 44, 22, 40, 27, 33]
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах. Победитель будет выбран через неделю (1 августа). Удачи!
Изменить: Поздравляем победителя, @issacg , с колоссальными 18 байтов!
n
должно быть 4, а не 5.
n
не поставляемых иa
не поставляемых чехлов - они действительно мало что добавляют.