(парадокс, парадокс, самый гениальный парадокс)
Это первая часть серии из нескольких частей, вдохновленная различными функциями R.
Задание
Учитывая набор данных положительных целых чисел, мне нужно , чтобы вычислить сводку 5 числа от . Однако я работаю с большими наборами данных, поэтому мне нужно, чтобы ваш код был как можно меньше, чтобы я мог хранить его на своем компьютере.
Пятизначная сводка состоит из:
- Минимальное значение
- Первый квартиль (Q1)
- Медиана / Второй квартиль (Q2)
- Третий квартиль (Q3)
- Максимальное значение
Существует несколько различных способов определения квартилей, но мы будем использовать тот, который реализован в R:
Определения:
- Минимум и максимум: наименьшее и наибольшее значения соответственно.
- Медиана: среднее значение, если имеет нечетное число записей, и среднее арифметическое двух средних значений, если имеет четное количество записей. Обратите внимание, что это означает, что медиана может быть нецелым значением. Мы должны были вычислить медиану раньше .
- Первый и третий квартили: разделите данные на две половины, включая центральный элемент в каждой половине, если имеет нечетное число записей, и найдите медианное значение каждой половины. Медиана нижней половины является первым квартилем, а медиана верхней половины - третьим квартилем.
Примеры:
. Медиана равна , а нижняя половина равна , что дает первый квартиль , а верхняя половина равна , что дает третий квартиль .
. Медиана равна , а нижняя половина равна , что дает первый квартиль, равный , а верхняя половина равна , что дает третий квартиль, равный .
Дополнительные правила:
- Ввод в виде массива или ближайшего аналога вашего языка.
- Вы можете предположить, что массив отсортирован в порядке возрастания или убывания (но укажите, какой именно).
- Вы можете вернуть / распечатать результаты в любом последовательном порядке и в любом удобном для вас формате, но, пожалуйста, укажите порядок и формат в своем ответе.
fivenum
Разрешены эквивалентные встроенные функции , но, пожалуйста, также реализуйте свое собственное решение.- Вы не можете предполагать, что каждое из пяти чисел будет целым числом.
- Пояснения приветствуются.
- Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке!
Случайно сгенерированные тесты
1 1 1 1 1 2 2 2 2 2 3 3 4 4 4 4 4 5 5 5 -> 1 1.5 2.5 4 5
1 2 2 2 4 4 5 5 6 7 7 8 9 9 9 9 9 10 10 10 -> 1 4 7 9 10
2 2 2 6 8 10 15 16 21 22 23 24 26 33 35 38 38 45 46 47 48 -> 2 10 23 38 48
1 2 9 -> 1 1.5 2 5.5 9
1 2 3 3 3 4 9 -> 1 2.5 3 3.5 9
1 1 2 5 7 7 8 8 15 16 18 24 24 26 26 27 27 28 28 28 29 29 39 39 40 45 46 48 48 48 48 49 50 52 60 63 72 73 79 85 86 87 88 90 91 93 94 95 95 97 100 -> 1 25 45 76 100
2 2 4 4 6 8 10 11 13 14 14 15 17 21 23 24 26 27 27 28 28 30 31 33 33 34 36 36 38 38 39 40 41 42 42 43 45 45 47 47 47 47 47 48 48 48 50 51 53 53 55 56 56 56 57 57 58 62 62 63 64 64 65 65 66 67 67 67 68 69 69 71 71 71 74 79 80 81 81 81 82 82 83 83 86 86 86 87 89 94 94 94 95 95 97 98 99 100 100 100 -> 2 33.5 54 76.5 100
1 3 3 4 -> 1 2 3 3.5 4
1 3 3 3 4 -> 1 3 3 3 4
источник
quantile
возвращает именованный вектор, тогдаfivenum
как безымянный. Может быть, это проблема ниже по течению, гдеfivenum
используется?unname()
это решит это. Может быть, есть исторические причины?fivenum
входных данных длиной 3 mod 4, включая два контрольных примера.MATL , 18 байт
Порядок вывода увеличивается, как в тестовых примерах.
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
MATL, как и MATLAB, вычисляет квантили, используя линейную интерполяцию, если необходимо (точно так же, как указано в задаче для медианы). Для достижения требуемого поведения для первого и третьего квартилей достаточно повторить медиану, если длина входных данных нечетная. Тогда результаты - это просто 0, .25, .5, .75 и 1 квантиль.
источник
Желе , 13 байт
Попробуйте онлайн!
Заказ:
[Q1, Q3, Q2/med, min, max]
.источник
Python 3.8 (предварительная версия) , 66 байт
Попробуйте онлайн!
Вход и выход в порядке возрастания.
источник
Python 3.8, 97 байт
Это предполагает, что входной список отсортирован в порядке возрастания.
f
это функция для возврата 5-значной сводкиЯ снял несколько байтов, взяв несколько подсказок из ответа FlipTack на Compute the Median.
Попробуйте онлайн!
Как это работает?
источник
Древесный уголь , 33 байта
Попробуйте онлайн!Ссылка на подробную версию кода. Выводится в порядке возрастания или убывания в зависимости от того, находится ли вход в порядке возрастания или убывания. Объяснение:
Получить индекс последнего элемента.
Сопоставьте элементы следующего массива и приведите результат к строке для неявной печати в отдельных строках.
Рассчитать позиции квартилей элементов, где дополнительный
0.5
означает, что значение является средним из двух соседних элементов.Рассчитайте квартиль в каждой позиции, взяв среднее значение для пола и потолка позиции.
источник
Ruby 2.7-preview1 , 59 байт
Прямой
плагиатпорт ответа Python XNOR в .Попробуйте онлайн! (на один байт больше, так как TiO использует Ruby 2.5 и не имеет пронумерованных параметров блока, например
@1
).источник
C (gcc) ,
123121119 байтов-2 благодаря потолку.
Предполагает список, отсортированный в порядке возрастания.
Выходы в порядке: мин, Q1, Q2, Q3, макс.
Попробуйте онлайн!
источник
05AB1E , 18 байт
Выход-заказ:
[Q1, Q3, Q2, min, max]
.Попробуйте онлайн или проверьте все контрольные примеры . (Я добавил сортировку
{
для набора тестов, чтобы тесты были легче проверять в порядке[min, Q1, Q2, Q3, max]
.)Объяснение:
источник