Напишите функцию, которая принимает список или массив и возвращает список отдельных элементов, отсортированных по убыванию по частоте.
Пример:
Данный:
["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
Ожидаемое возвращаемое значение:
["Doe","Harry","John","Dick"]
Ответы:
APL (14)
Это функция, которая принимает список, например:
Объяснение:
∘.≡⍨⍵
: сравнить каждый элемент в массиве с каждым другим элементом в массиве, давая матрицу+⌿
: сумма столбцов матрицы, показывающая, сколько раз встречается каждый элемент⍒
: дать индексы нисходящего вида⍵[
...]
: упорядочить⍵
по заданным показателям∪
: получить уникальные элементыисточник
Питон 3 -
4743; Python 2 -4039Для Python 3:
Для Python 2:
Демо-версия:
источник
f=lambda n:sorted(set(n),cmp,n.count,1)
39 персонажейcmp
функцию, иkey
функцию. Здорово.f=lambda n:sorted(set(n),key=n.count)[::-1]
Математика, 31
(С
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
)источник
Reverse
, ноSort[GatherBy@n][[-1;;1, 1]]
не работает :). Есть идеи?Математика (26
37)С
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
:Mathematica V10 + (26) :
источник
Perl 6 (36 байт, 35 символов)
»
может быть заменен на>>
, если вы не можете обрабатывать UTF-8. Я почти уверен, что это может быть короче, ноBag
класс относительно странен в своем поведении (к сожалению) и не совсем завершен, так как он относительно новый (но он может считать аргументы).{}
объявляет анонимную функцию.Пример вывода (из Perl 6 REPL):
источник
Рубин: 34
37персонажи(отредактировано: предыдущее решение с 30 символами было телом функции)
источник
f=->a{a.sort_by{|z|-a.count(z)}&a}
. Это&
делает уникальный.GolfScript, 14 символов (19 как именованная функция, также 14 как полная программа)
Этот код принимает массив в стеке и сортирует его уникальные элементы в порядке убывания по количеству вхождений. Например, если входной массив:
тогда выходной массив будет
Примечание. Приведенный выше код представляет собой простую последовательность утверждений. Чтобы превратить его в именованную функцию, оберните его в фигурные скобки и присвойте ему имя, как в:
Или же, чтобы превратить код в полноценную программу, которая читает список из стандартного ввода (используя приведенную выше запись списка) и печатает его в стандартный вывод, добавляя
~
и добавляя`
код. В[.
этом случае можно опустить (так как мы знаем, что в стеке больше ничего не будет), так что получающаяся в результате 14-символьная программа будет иметь вид:Как это работает?
:a
сохраняет копию исходного массива в переменнойa
для последующего использования..|
вычисляет объединение множества массива с самим собой, исключая дубликаты как побочный эффект.{ }$
сортирует дедуплицированный массив, используя пользовательские ключи сортировки, вычисленные кодом внутри фигурных скобок. Этот код берет каждый элемент массива, использует вычитание массива, чтобы удалить его из исходного входного массива, сохраненного вa
, и подсчитывает количество оставшихся элементов. Таким образом, элементы сортируются в порядке убывания частоты.Ps. Смотрите здесь для оригинальной 30-символьной версии.
источник
[a\])^
должно быть эквивалентно[.;]a\-
. Сортировка по количеству несовпадающих элементов - хорошая идея.^
дублирует, дублирует,-
нет. (И ITYM(
, не)
.)[a\](\-
Будет работать, но не спасет никаких персонажей.R: 23 символа
Но он использует не очень хороший ярлык
T
дляTRUE
...источник
если это могло бы соответствовать здесь:
In sql-server
ИЛИ
увидеть это в действии
источник
select name from #t1 group by name order by count(*) desc
PHP,
63 6261 символовДемо-версия:
источник
array_count_values()
... Это все, что вы должны использовать (в том числеarsort()
)array_count_values()
как я вижу, не удаляет дублированные значения и не упорядочивает их.array_count_values
дольше?<?$u=array_count_values($_GET);arsort($u);print_r($u);
на мой взгляд 54 байтаРубин: 59 символов
Образец прогона:
источник
Mathematica, 39 символов
источник
JavaScript (ECMAScript5):
118113 символовhttp://jsfiddle.net/mblase75/crg5B/
источник
f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}
. (В настоящее время только в Firefox.)m[n[i]]=-~m[n[i]]
для приращения, и вам не нужно {} вокруг тела цикла.Haskell - 53 персонажа
Объяснение: первые две строки - это необходимые импорты, следующая строка кода - это сигнатура типа (обычно это не обязательно), фактическая функция - последняя строка. Функция сортирует список по своему естественному порядку, группирует равные элементы в списки, сортирует список списков по убыванию и берет первый элемент в каждом списке.
общая длина, включая импорт: 120
без импорта, но с подписью типа: 86
сама функция: 53
источник
Clojure: 43 символа
Функция:
Демо (в репл):
источник
Perl
чтобы соответствовать данной спецификации ввода / вывода мне нужно 120 символов
самый короткий код, беря один элемент в строку и печатая один элемент в строке, мне нужно всего 55 символов
источник
C #: 111 символов
(внутри класса)
Простое решение с использованием LINQ.
источник
R (22)
В качестве функции потребуется еще 11 символов.
Использование:
источник
Скала (71)
Ungolfed:
источник
J, 8 байт
использование
Имена хранятся в виде массива строк в штучной упаковке.
объяснение
источник
CJam, 15 байт (возможно, не конкурирующих)
Это может использовать функции CJam после того, как этот вызов был опубликован. Мне лень проверять.
источник