Если задано целое число n и список натуральных чисел m 1 , m 2 , ..., выведите список целых чисел m 1 ' , m 2 ' , ... где m x ' определяется как среднее значение m от xn до m x + n .
При расчете этих средних значений игнорируйте индексы, выходящие за пределы (и соответственно измените то, на что вы делите сумму). n всегда будет ≥ 1, но никогда не будет меньше половины длины m (округлено в меньшую сторону) или больше. Это означает, что минимальная длина m равна 4. Элементы в m будут целыми положительными числами, но выходные данные должны быть с точностью не менее 3 десятичных знаков.
Элементами ввода / вывода, которые являются списками, могут быть строки с пробелами / запятыми или массивы / списки / и т. Д. Для ввода, если ваше решение является функцией, вы можете дополнительно принять первый аргумент n и дополнительные аргументы как m x (это также относится и к аргументам командной строки).
Вот визуальное представление n=1
:
1 4 5 7 10
__/ | | |
L avg(1,4) = 2.5
| | |
\___/ | |
L avg(1,4,5) = 3.333
| |
\___/ |
L avg(4,5,7) = 5.333
|
\___/
L avg(5,7,10) = 7.333
\___
L avg(7,10) = 8.5
Final output: 2.5 3.333 5.333 7.333 8.5
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Тестовые случаи ( они были сделаны вручную; пожалуйста, сообщите мне о любых ошибках ):
In Out
----------------------------------------------------------------------
n=1, m=12 6 3 9 9 7 6 6
n=1, m=1 4 5 7 10 2.5 3.333 5.333 7.333 8.5
n=1, m=1 3 3 7 4 2 4 2 2 2.333 4.333 4.666 4.333 3.333 2.666 3
n=2, m=1 3 5 9 10 14 15 16 23 3 4.5 5.6 8.2 10.6 12.8 15.6 17 18
n=3, m=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
n=3, m=1 2 3 4 5 6 7 8 2.5 3 3.5 4 5 5.5 6 6.5
источник
avg(0,1,2)
это не то же самое, чтоavg(1,2)
. Для «крайних случаев» (ха) не следует усреднять столько элементов списка ввода.m_i
положительного ограничения .Ответы:
Pyth, 20 байтов
Тестирование
Довольно просто, просто вырежьте соответствующий раздел из списка, затем усредните.
источник
E
вне карты, потому что он будет пытаться прочитать новое значение, если оно внутри. Это делает то же самое количество байтов.MATL ,
30282624 байтаПроверено на Matlab и на Октаве. Использует текущую версию (9.1.0) языка / компилятора.
Входные данные: сначала число, управляющее длиной окна, затем массив с форматом
[1 4 5 7 10]
.РЕДАКТИРОВАТЬ (20 мая 2016 г.): попробуйте онлайн! Код в ссылке
X+
замененY+
на соответствующий языковой версии 18.0.0.пример
объяснение
Эквивалентный код Matlab будет
В коде MATL используются недавно добавленные функции неявного ввода и автоматического буфера обмена с функцией ввода:
источник
CJam,
3130 байтФормат ввода есть
n [m1 m2 ... mx]
.Запустите все тестовые случаи. (Автоматически преобразует набор тестов в требуемый формат ввода.)
Это работает путем добавления и добавления
n
пробелов, затем взятия всех подстрок длины2n+1
и повторного удаления пробелов перед вычислением их средних значений .источник
Юлия, 57 байт
Это функция, которая принимает два целых числа и возвращает массив чисел с плавающей точкой.
Подход здесь очень прост. Мы создаем новый массив, беря среднее значение секций входного массива, обрезая их спереди и сзади.
источник
Haskell,
9795 байтПример использования:
2 # [1,3,5,9,10,14,15,16,23]
->[3.0,4.5,5.6,8.2,10.6,12.8,15.6,17.0,18.0]
.Как это устроено:
источник
Pyth, 22 байта
Объяснение:
Попробуй это здесь .
источник
JavaScript (ES6), 104
Текущий общий / текущий размер выборки. В Javascript чтение значения за пределами массива дает неопределенное значение, которое можно преобразовать в 0, используя ~~
Ungolfed
Тестовое задание
источник
JavaScript (ES6), 82 байта
код:
тестовое задание:
источник