Напишите фрагмент кода для расчета режима (наиболее распространенного числа) списка натуральных чисел.
Например, режим
d = [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
есть 1
, потому что это происходит максимум в 5 раз.
Вы можете предположить, что список хранится в такой переменной, как d
и имеет уникальный режим.
например: Python, 49
max(((i,d.count(i))for i in set(d)), key=lambda x:x[1])
Это код-гольф , поэтому выигрывает самое короткое решение в байтах.
code-golf
array-manipulation
garg10may
источник
источник
d,
иkey=
.defaultdict(int)
илиCounter
. Нечто подобноеCounter(d).most_common()[0]
.Matlab / Octave,
75 байтовНеудивительно, что есть встроенная функция для поиска режимов. Как анонимная функция:
Это возвращает наиболее часто встречающийся элемент во входном векторе со связями, идущими к меньшему значению.
Сохранено 2 байта благодаря Денису!
источник
help mode
): «Если два или более значений имеют одинаковую частоту, то« mode »возвращает наименьшее».@mode
.Пиф - 6
Попробуйте онлайн.
Ожидает ввода на STDIN, как
[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
. Связи разрешаются последним появлением, потому что Python выполняет стабильные сортировки.Сортирует список по количеству значений в списке, а затем печатает последний номер списка.
Q
может быть заменено на,d
если вы инициализировали,d
чтобы содержать значение до, например,=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
Python-esque псевдокод:
Полное объяснение:
Pyth
orderby
работает точно так же, как Pythonsorted
сorderby
первым аргументом, являющимсяkey
аргументом.источник
Mathematica, 25 байтов
или
Как и в вызове, ожидается, что список будет храниться в
d
.или ... 15 байт
Конечно, Mathematica не была бы Mathematica, если бы она не имела встроенного:
Commonest
возвращает список всех наиболее распространенных элементов (в случае ничьей) и#&@@
является игрой в гольфFirst@
.источник
Рубин, 22 байта
В основном это порт моего ответа Mathematica, за исключением того, что у Ruby есть прямой,
max_by
поэтому мне не нужно сначала сортировать.источник
d.max_by d.method:count
но это примерно на миллион (а точнее даже на два) байта больше. Тем не менее, стоит отметить, что это возможно.R,
3325 байтСпасибо @Hugh за сокращение помощи:
Оригинал:
Это вычисляет частоту каждого элемента в векторе
d
, а затем возвращает имя столбца, содержащего наибольшее значение. Возвращаемое значение на самом деле является символьной строкой, содержащей число. Это нигде не говорило, что это не хорошо, так что ...Любые предложения по сокращению этого приветствуются!
источник
names(sort(-table(d))[1])
CJam,
1110 байтПредполагает массив в переменной с именем
A
. Это в основном сортировка массива на основе вхождения каждого числа в массиве, а затем выборка последнего элемента массива.Пример использования
Выход
1 байт сохранен благодаря Денису!
Попробуйте это онлайн здесь
источник
A{A\-,}$0=
на один байт короче.Ae`$e_W=
$e`$e_W=
Powershell 19
(это предполагает, что массив уже включен
$d
)источник
J - 12 символов
Анонимная функция. Сортирует список от большинства к наименее распространенным, беря первый элемент.
0{
Первый из~.
Уникальные предметы\:
Вниз по#/.~
частотыПопробуйте сами.
источник
JavaScript (ES6) 51
Просто однострочное выражение с использованием предварительно загруженной переменной d. Сортируйте массив по частоте, затем получите первый элемент.
Противный побочный эффект, оригинальный массив изменен
Как обычно, используйте .map вместо .reduce, потому что в целом он на 1 символ короче. С .reduce это «почти чистое решение без игры в гольф».
Наконец, решение с использованием функции, без изменения исходного массива и без глобальных переменных (62 байта):
Тест в консоли FireFox / FireBug
Выход 1
Массив d становится:
источник
Python - 32
Если честно, нигде в будущем не вижу решения из 18 символов.
РЕДАКТИРОВАТЬ: Я стою исправлено и впечатлен.
источник
JavaScript, ES6, 71 байт
Немного долго, можно много играть в гольф.
Это создает функцию,
f
которая может быть вызвана какf([1,1,1,2,1,2,3,4,1,5])
и вернется1
.Попробуйте это на вашей последней консоли Firefox.
источник
f=a=>(c=b=[],a.map(x=>b[x]++-1?0:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
на 1 байт короче.05AB1E , 3 байта
(не конкурирует - вопрос предшествует языку)
Объяснение:
Если вы хотите сохранить массив в переменной вместо использования ввода, просто поместите массив в стек в начале программы.
Попробуйте онлайн!
источник
C # - 49
Не могу соревноваться, используя C #, ну да ладно:
Предполагая
d
это массивd.GroupBy(i=>i).OrderBy(a=>a.Count()).Last().Key;
источник
Баш -
2927 символовИспользуй это:
то есть «1» - это режим, и он появляется пять раз.
источник
sort|uniq -c|sort -nr|sed q
спасает пару персонажейGolfScript, 10 байт
Из этого ответа я написал в Советы по игре в гольф на GolfScript . Ожидает вход в массив с именем
a
, возвращает результат в стеке. (Чтобы прочитать ввод из массива в стеке, добавьте:
11 байтов; чтобы прочитать ввод из стандартного ввода (в формате[1 2 1 3 7]
), также добавьте~
12 байтов.)Этот код работает путем перебора входного массива, вычитания каждого элемента из исходного массива и подсчета количества оставшихся элементов. Затем он используется в качестве ключа для сортировки исходного массива, и возвращается первый элемент отсортированного массива.
Демо онлайн.
Ps. Спасибо Питеру Тейлору за то, что он указал мне на этот вызов .
источник
Дьялог АПЛ, 12 персонажей
d[⊃⍒+/∘.=⍨d]
∘.=⍨d
так же, какd∘.=d
, рефлексивное внешнее произведение=
. Это создает логическую матрицу, сравнивающую каждую пару элементов вd
.+/
суммирует эту матрицу вдоль одной из осей и производит вектор.⍒
оценивает вектор, т.е. сортирует его по индексам. (Как показывают глифы,⍒
оценки в порядке убывания и⍋
будут оцениваться в порядке возрастания.)⊃
берет первый индекс из оценки - индекс самого большого элементаd
.d[...]
возвращает этот элемент.источник
+/∘.=⍨d
рассчитывает для каждого элементаd
.⊢∘≢⌸d
рассчитывает для каждого элемента∪d
, поэтому индексы не соответствуютd
. Контрпример:d←1 1 2 2 2
. Чтобы это сработало:(∪d)[⊃⍒⊢∘≢⌸d]
или(⊃⍒⊢∘≢⌸d)⊃∪d
.Perl 6 , 21 байт
Пример:
Если есть галстук, он напечатает больше из тех, которые связали.
.Bag
Метод на список или массив создает хэш квантора , который связывает общее количество, сколько раз данное значение было видно с этим значением..invert
Метод создает список пар в мешке с ключом и значением выгружена. (Причина, по которой мы это называем, заключается в следующем методе, который делает то, что мы хотим).max
Метод на список пара возвращает наибольший пар сравнения ключей первые и в случае равенства сравнения значений.(Это потому, что именно так
multi infix:<cmp>(Pair:D \a, Pair:D \b)
определяется, что больше).value
Метод возвращает значение из пары. (Это был бы ключ, за которым мы следовали, если бы не.invert
звонок ранее)Если вы хотите вернуть все значения, которые связаны в случае связи:
.classify
Метод возвращает список пар , где ключи от вызова лямбда Whatever*.value
с каждой из пар.Затем мы звоним,
.max
чтобы получить самую большую пару.Звонок, чтобы
.value
получить нам оригинальные пары из сумки (только один в этом случае)Затем мы используем метод
>>.key
для вызова.key
каждой пары в списке, чтобы мы получили список значений, которые были замечены чаще всего.источник
Java 8: 184 байта
Вход A должен быть типа
Integer[]
. Обратите вниманиеjava.util.*
иjava.util.stream.*
необходимо импортировать, однако в духе oneliner они не учтены.источник
(i->i,Collectors.counting())
.Инструменты Bash + Unix, 62 байта
Ожидает массив в STDIN. Формат ввода не считается, если числа являются неотрицательными целыми числами.
Отредактировано: экранированный символ в аргументе grep. Теперь его можно безопасно запускать в непустых каталогах. Благодаря манатворке.
источник
[0-9]*
может быть расширен до соответствующих имен файлов.'
вокруг аргументаgrep
.Perl, 27 байт
Возвращает последнее наиболее распространенное значение в случае связи.
источник
PHP,
5350 байтЗапустите так:
Tweaks
d
источник
Java 8, 83 байта
d
должно бытьCollection<Integer>
.Если
Collections
можно статически импортировать:59 байт
источник
Haskell 78
Если импорт игнорируется, это 45 .
источник
maximumBy
вместоlast.sortBy
. Новый код станетg=head.maximumBy(comparing length).group.sort
.g=
. 2.) Вы можете заменитьmaximumBy(comparing length)
тем,snd.maximum.map((,)=<<length)
что не нужно импортироватьOrd
, в общей сложности 62 байта: попробуйте онлайн!Haskell ,
4239 байтПопробуйте онлайн!
Изменить: чем Zgarb для -3 байта
источник
sum
здесь нет необходимости.Брахилог , 5 байт
Попробуйте онлайн!
Это на самом деле не фрагмент, но я не уверен, что будет ...
источник
Clojure, 32 байта
(frequencies %)
возвращает хэш-карту, которую можно использовать как функцию. Учитывая ключ, он возвращает соответствующее значение :)Равная длина:
источник
Скала, 32
источник
C ++ 119
Полный код и тест:
источник