GolfScript, 14 символов (19 как именованная функция, также 14 как полная программа)
:a.|{[.]a\-,}$
Этот код принимает массив в стеке и сортирует его уникальные элементы в порядке убывания по количеству вхождений. Например, если входной массив:
["John" "Doe" "Dick" "Harry" "Harry" "Doe" "Doe" "Harry" "Doe" "John"]
тогда выходной массив будет
["Doe" "Harry" "John" "Dick"]
Примечание. Приведенный выше код представляет собой простую последовательность утверждений. Чтобы превратить его в именованную функцию, оберните его в фигурные скобки и присвойте ему имя, как в:
{:a.|{[.]a\-,}$}:f;
Или же, чтобы превратить код в полноценную программу, которая читает список из стандартного ввода (используя приведенную выше запись списка) и печатает его в стандартный вывод, добавляя ~
и добавляя `
код. В [.
этом случае можно опустить (так как мы знаем, что в стеке больше ничего не будет), так что получающаяся в результате 14-символьная программа будет иметь вид:
~:a.|{]a\-,}$`
Как это работает?
:a
сохраняет копию исходного массива в переменной a
для последующего использования.
.|
вычисляет объединение множества массива с самим собой, исключая дубликаты как побочный эффект.
{ }$
сортирует дедуплицированный массив, используя пользовательские ключи сортировки, вычисленные кодом внутри фигурных скобок. Этот код берет каждый элемент массива, использует вычитание массива, чтобы удалить его из исходного входного массива, сохраненного в a
, и подсчитывает количество оставшихся элементов. Таким образом, элементы сортируются в порядке убывания частоты.
Ps. Смотрите здесь для оригинальной 30-символьной версии.