задача
Учитывая (любым способом) отсортированный набор данных с плавающей запятой, верните (любым способом и в пределах 1 ‰ от правильного значения) среднее значение четверти .
Один возможный алгоритм
- Откажитесь от самых низких и самых высоких четвертей точек данных.
- Рассчитать среднее (сумма, деленная на количество) оставшихся точек данных.
Примечание. Если размер набора данных не делится поровну на четыре, вам придется взвесить точки данных , которые совместно используются подмножествами. См. Пример оценки 2 ниже.
Пример оценки 1
Даны {1, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 38}
- Количество данных равно 12, поэтому мы удаляем самые низкие и самые высокие 3 точки данных:
{1, 3, 4,5, 6, 6, 7, 7, 8,8, 9, 38} - Среднее из оставшихся 6 точек данных:
(5 + 6 + 6 + 7 + 7 + 8) / 6 = 6,5
Пример оценки 2
Дано {1, 3, 5, 7, 9, 11, 13, 15, 17}
- Число равно 9, поэтому в каждом квартале есть 2¼ точек данных:
{1, 2, (0,25 × 5),(0,75 × 5), 7, 9, 11, (0,75 × 13),(0,25 × 13), 15, 17} - Среднее из оставшихся 4,5 точек данных:
(0,75 × 5 + 7 + 9 + 11 + 0,75 × 13) / 4,5 = 9
Pyth ,
1110 байтТестирование.
Как это работает
Это приводит к четырехкратному дублированию списка ввода, чтобы гарантировать, что количество данных делится на 4.
Это все еще нуждается в сортировке, потому что
*4
применяется ко всему списку, а не к каждому отдельному элементу.Затем он разбивает список на четыре равные части, а затем убирает первую и последнюю часть.
Оставшийся список сглаживается, а среднее берется.
источник
MATL ,
1211 байтВвод представляет собой горизонтальный вектор с форматом
или
Попробуйте онлайн!
объяснение
источник
6L)
убрать первый и последний элементы? Когда я делаю это, это сбивает кучу сложных чисел.[2, -1+i]
при использовании в качестве индексного средства2:end-1
Снеговик , 66 байт
Попробуйте онлайн!
Использует тот же алгоритм, что и ответы @LeakyNun .
источник
Python 3, 50 байт
Идео это!
Как это работает
Это перевод моего ответа в Pyth .
источник
Желе ,
141312 байтПопробуйте онлайн!
Тестирование.
Как это работает
Это перевод моего ответа в Pyth .
источник
Пайк,
1613 байтПопробуй это здесь!
источник
Брахилог , 21 байт
Попробуйте онлайн! или проверить несколько тестовых случаев
объяснение
Это в основном алгоритм ответа Pyth @ LeakyNun.
Единственный маленький трюк заключается в умножении на обратную величину длины вместо деления на длину, потому что деление между двумя целыми числами является целочисленным делением.
источник
Октава , 44 байта
Это определяет анонимную функцию.
Вход представляет собой горизонтальный вектор.
Попробуйте это на Ideone .
объяснение
Входной горизонтальный вектор сначала умножается матрицей (
*
) на вектор столбцов из четырех (построенный с~~(1:4)'
). В результате получается матрица из четырех столбцов, где каждая строка является копией входного вектора. Затем он преобразуется, сохраняя линейный порядок элементов, в матрицу из 4 столбцов (reshape(...,[],4)
). Центральные два столбца сохраняются ((:,2:3)
) и линеаризуются в один столбец ((:)
), из которого вычисляется среднее значение (mean(...)
).источник
[x;x;x;x]
вместо~~(1:4)'*x
@(x)mean([x;x;x;x](:)((b=numel(x))+1:3*b))
также на 2 байта меньше. Вот почему я придумал, но это в основном так же, как ваш подход.J ,
2018 байт2 байта благодаря @miles
Попробуйте онлайн! ( Онлайн переводчик )
использование
Как это работает
Это перевод моего ответа в Pyth .
источник
-@#(+/%#)@}.#}.4#]
за 18 байт .На самом деле ,
201513 байтПопробуйте онлайн!
Как это работает
Это перевод моего ответа в Pyth .
источник
Октава, 42 байта
Еще одна анонимная функция для Octave.
Вы можете попробовать это онлайн . Просто введите эту команду, а затем введите
ans([1 2 4 5 6 9])
или какие-либо цифры, необходимые.Этот начинается с создания из входного массива одного с 4-мя каждым входным элементом, сначала конкатенируя четыре копии по вертикали, а затем выравнивая по вертикали. Это поддерживает порядок сортировки.
Затем он извлекает диапазон элементов из длины входного массива плюс от 1 до трехкратной длины входного массива. Поскольку новый массив в четыре раза длиннее, это отсекает верхний и нижний квартили.
Наконец, возвращается среднее значение нового массива.
источник
05AB1E, 15 байтов
объяснение
Попробуйте онлайн
источник
APL (Dyalog) , 15 байтов
Попробуйте онлайн!
4∘/
дублировать каждый элемент-∘≢↓
отбросить столько конечных элементов, сколько есть элементов в аргументах≢↓
отбросить столько ведущих элементов, сколько есть элементов в аргументе(
…)
Применить следующую молчаливую функцию:+/
сумма÷
деленное на≢
подсчетисточник
JavaScript (ES6), 75 байт
Использует очевидный подход с четырьмя дубликатами и сортировкой, и я использую
reduce
, что приятно. Единственная хитрость здесь состоит в том, чтобы сохранить 4 байта, повторно используя компаратор сортировки, чтобы вычесть все элементы массива из нуля, что дает мне-2l
время, которое я хочу получить.источник
Golfscript,
2829 байтПопробуйте онлайн!
источник
На самом деле, 12 байтов
Попробуйте онлайн! (в настоящее время не работает, потому что TIO отстает от нескольких версий)
Объяснение:
источник
Mathematica, 51 байт
Сортирует четыре копии списка (чтобы избежать проблем с длиной списка, не кратной четырем), принимает участие
"1 quarter the length of resulting list plus 1"
в"1/4 length list + 1 from the end"
, принимает ихMean
.источник
Java
146126 байтТакая ява многословна!
Старые Ungolfed частично читаемые с тестовыми примерами
источник
Clojure,
8281 байтИзменить: на 1 байт меньше, переписав часть "didvide by 2 n".
Предыдущая:
Использует
for
для генерации 4 повторных значений, используя float,2.0
чтобы не иметь дробных результатов, остальное просто стандартно.источник
R,
1711 байтПредполагается
n
, что входной вектор в стандартной форме Rn=c(1, 2, 3, ...)
.Это ни в коем случае не удивительно, поскольку R можно считать «языком статистических вычислений» и имеет множество встроенных статистических данных.
ОБНОВИТЬ. Благодаря rturnbull сохранено 6 байт, поскольку
trim
по умолчанию это первый необязательный аргумент!Тестовые случаи:
источник
trim
это второй аргумент по умолчанию, вам не нужно его называть;0.25
можно сократить до.25
или1/4
. Это экономит вам шесть байтов.Excel, 17 байт
Удобный формат ввода делает это легко. Введите один в строке в столбце А.
источник