Используя выбранный вами язык, напишите самую короткую функцию / скрипт / программу, которая позволит вам идентифицировать слово с наибольшим количеством уникальных букв в тексте.
- Уникальные буквы должны содержать любой отдельный символ с использованием кодировки UTF-8 .
- Версии одного и того же символа в верхнем и нижнем регистре отличаются и различаются;
'a' != 'A'
- Версии одного и того же символа в верхнем и нижнем регистре отличаются и различаются;
- Слова связаны любым пробелом.
- «Буквы» - это любой символ, который может быть представлен одним символом Юникода.
- Текстовый документ должен быть прочитан вашим кодом - не допускается предварительная загрузка / жесткое кодирование текста.
- На выходе должно быть слово, за которым следует количество уникальных букв.
llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch - 18
- Любой разделитель / интервал между этими двумя значениями зависит от вас, если есть хотя бы один символ для их разделения.
- Если существует более одного слова с наибольшим количеством, выведите все слова для этого количества, разделив их одной новой строкой.
Сверхдоказательство - 16 псевдоламеллибранчатый - 16
- Это код гольф, поэтому выигрывает самый короткий код.
Этот ответ на английском. SE вдохновил меня на создание этой задачи. В примере используется только список слов , но любой текст должен обрабатываться.
LlanfairPG
- это валлийское слово, содержащее буквы из валлийского алфавита,ll
иch
обе они представляют собой отдельные буквы на валлийском языке.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+~`<>/\\?'";:{}[],.
является ли верным «слово»?Ответы:
APL (56)
Это функция (вопрос говорит, что это разрешено), которая принимает строку и возвращает матрицу слов и уникальную длину.
Использование:
Объяснение:
⎕ML←3
: установите уровень миграции равным 3 (то⊂
есть раздел вместо включения)W←⍵⊂⍨⍵≠' '
: сохранить вW
заданной строке, где каждый раздел состоит из непробельных символов.⍙←⍒∆←↑∘⍴∘∪¨W
: получить количество (⍴
) элементов unique (∪
) в каждой части (¨
)W
и сохранить их∆
, затем получить порядок сортировки при сортировке вниз по this (⍒
) и сохранить его в⍙
.∆[⍙
...]
: сортировать∆
по⍙
, так что теперь у нас есть уникальные длины в порядке.∆∘.=∆←∆
: сохранить отсортированный∆
обратно∆
и посмотреть, какие элементы∆
равны.↑+/
: суммируем строки (теперь мы знаем, сколько элементов равно каждому элементу), а затем берем первый элемент (теперь мы знаем, сколько элементов равно первому элементу, то есть сколько слов связано для первого места).W[⍙]⍴⍨
: СортироватьW
по⍙
, и сделать первый N, где N это номер , мы просто вычислить.{⍵,⍴∪⍵}¨
: для каждого из них получите само слово и количество уникальных символов в слове⊃
: формат как матрицаисточник
Mathematica
96115Редактировать : код теперь находит все слова с максимальным количеством символов. Я отказываюсь рассматривать запятые как символы слова.
Примеры
или
или
Более длинные примеры
Сюрприз: самое «уникальное» слово в Декларации независимости также самое уникальное слово в Алисе в стране чудес !
источник
Python 2 (110 (98 с использованием файлового ввода))
,
Что нужно улучшить: печать (33 символа)
Пунктуация считается буквой.
источник
NameError: global name 'r' is not defined
. После добавления одинарных кавычекr
:AttributeError: 'file' object has no attribute 'split'
. Python 3.3.0:SyntaxError: invalid syntax 'print i,c'
.Это мой первый Codegolf, я так взволнован :) Также это означает, что это, вероятно, не очень хорошо.
Groovy
127117112105Редактировать: Поскольку функции, кажется, разрешены, здесь одна из 105. Я также переименовал переменные, чтобы первый столбец читал ACDC, потому что это важно в любом виде исходного кода:
Вы бы назвали это так:
Без функции с использованием стандартного ввода в 112 :
Входные данные: Lorem Ipsum Текст от primo
Вывод всех скриптов:
У кого-нибудь есть идеи, как сделать их более заводными?
источник
Perl 78 байт
Интерпретация ограничения «Текстовый документ должен быть прочитан вашим кодом» означает, что параметры командной строки, которые читают и анализируют ввод, недопустимы. Как и в приведенном ниже решении PHP, только символы 10 и 32 считаются разделителями слов. Вход и выход также принимаются таким же образом.
PHP 128 байт
Единственными символами, которые считаются разделителями слов, являются символ 10 и символ 32. Остальные, включая пунктуацию, считаются частью слова.
Он содержит несколько двоичных символов, которые сохраняют кавычки, но в результате должны быть сохранены с кодировкой ANSI для правильной работы. В качестве альтернативы можно использовать эту версию, которая на 3 байта тяжелее:
Пример ввода / вывода:
вход 1:
выход 1:
вход 2:
выход 2:
источник
incredulity
имеет 10 уникальных букв, а не 11.GoRuby 2.0.0 - 66 символов
Приведенные ниже решения на самом деле не нашли все совпадения, а только одно. Вот мой окончательный вариант:
Примеры:
производит:
GoRuby 2.0.0 - 29 символов (не точный формат вывода)
Ожидает ввода от стандартного ввода. Формат вывода немного другой, хотя. Например:
GoRuby 2.0.0 -
4240 символовожидает ввода от стандартного ввода
Ruby 1.9.3 - 6965 символовожидает ввода от стандартного ввода (то же, что и выше, но без сокращений GoRuby)
источник
Javascript
163 155 152162 байтаЭто примерно так коротко, как я могу это получить:
В этой версии
/\s/
слова разделяются на основе пробелов, поэтому они включают знаки препинания, запятые, точки и т. Д. Как часть слов. Это легко изменить,/\b/
чтобы не включать их.Я посмотрю, что я могу сделать с циклами for вместо forEaches, чуть позже.
I / O:
источник
In the event more than one word exists with the highest count, print all words for that count, **with one new line delimiting**.
Scala 129 символов:
источник
R - 106 символов
Как функция с вводимым текстом в качестве параметра:
И несколько примеров:
Или R - 100 символов.
В качестве функции указывается путь к текстовому файлу:
Использование:
источник
Python
176168источник
Python3 119
Читает из файла с именем
a
.Протестировано с входными текстами из @primo:
источник
VBScript - 430 / VBA - 420
VBScript:
VBA:
источник