Введение
Какую часть английского алфавита использует данная строка? Предыдущее предложение использует 77%. В нем 20 уникальных букв (howmucftenglisapbdvr) и 20/26 ≃ 0,77.
Вызов
Для входной строки верните процент букв английского алфавита, присутствующих в строке.
Ответ может быть в процентах или в десятичной форме.
Входная строка может иметь прописные и строчные буквы, а также знаки препинания. Однако вы можете предположить, что в них нет диакритических знаков или акцентуаций.
Контрольные примеры
вход
"Did you put your name in the Goblet of Fire, Harry?" he asked calmly.
Некоторые действительные выводы
77%, 76.9, 0.7692
Входные данные:
The quick brown fox jumps over the lazy dog
Все действительные выводы:
100%, 100, 1
Ожидаемый результат для "@#$%^&*?!"
и ""
составляет 0.
"@#$%^&*?!"
,""
77%
и76.9
принято, то77
тоже принято?Ответы:
Python 3 , 42 байта
Попробуйте онлайн!
Мы отфильтровываем все неалфавитные символы из строки, беря (устанавливая) разницу между прописными и строчными представлениями. Затем мы берем длину и делим на 26.
Python 3 , 46 байт
Попробуйте онлайн!
Подсчитайте уникальные алфавитные (строчные) символы и разделите на 26. В Python 2 потребуется еще 3 символа; два для перехода
{*...}
наset(...)
, и один для создания 26 поплавка:,26.
чтобы избежать разделения пола.Python 3 , 46 байт
Попробуйте онлайн!
Та же самая длина, по существу та же самая как предыдущий, но без "встроенного" строкового метода.
источник
1.0
а нет1
? (Я не хотел специально запрещать это, чтобы это не мешало определенным языкам, но мне любопытно)//
, но тогда это всегда будет целочисленное деление, что явно не то, что мы хотим здесь. Имеет смысл, чтобы они не делали тип данных вывода зависимым от конкретных значений операндов, что означает, что они всегда плавающие, даже если это целое число.MATL , 8 байт
Попробуйте это на MATL Online
объяснение
источник
Октава / MATLAB, 33 байта
Попробуйте онлайн!
объяснение
источник
05AB1E ,
876 байт-1 байт благодаря @LuisMendo .
Попробуйте онлайн или проверьте еще несколько тестов .
Альтернатива 6 байтов предоставлена @Grimy :
Попробуйте онлайн или проверьте еще несколько тестов .
Обе программы выводятся как десятичные.
Объяснение:
источник
láêg₂/
также является 6-байтовым.C # (интерактивный компилятор Visual C #) ,
5649 байтПопробуйте онлайн!
-6 байт благодаря innat3
источник
&&
в&
.APL (Dyalog Extended) , 10 байтов SBCS
Функция анонимного молчаливого префикса. Возвращает десятичную дробь.
Попробуйте онлайн!
⌈
верхний регистр⎕A∩
пересечение с прописной A lphabet≢
длина счета∘
тогда26÷⍨
разделить на двадцать шестьисточник
⌹∘≤⍨⎕A∊⌈
Perl 6 ,
2724 байта-3 байта благодаря nwellnhof
Попробуйте онлайн!
источник
.lc
будет работать тоже), с точки зрения «правильности»,.fc
может быть лучше (особенно если вУтилиты Bash и Gnu (
8178686042 байта)-8 байт благодаря @wastl
-18 байт благодаря Науэлю, использующему некоторые уловки, которых я не знал:
sort -f
иgrep -i
игнорировать регистрsort -u
это замена для| uniq
источник
echo $(tr A-Z a-z|tr -cd a-z|fold -1|sort -u|wc -l)/26|bc -l
K (ок) ,
1915 байтРешение:
Попробуйте онлайн!
Объяснение:
Преобразуйте входные данные в строчные, по модулю 97 («az» - это 97-122 в ASCII, по модулю 97 - от 0 до 25), возьмите уникальные, суммируйте результаты, которые меньше, чем 26, и преобразуйте в процент от 26.
Заметки:
1-%[;26]
=>1-1%26%
#(!26)^
=>+/26>?
источник
97
делает здесь%[;26]
->1%26%
1%26%#?(26>)#97!_
1%26%+/26>?97!_
для 15PowerShell ,
5552 байтаПопробуйте онлайн!
Первая попытка, все еще пробуя случайные идеи
РЕДАКТИРОВАТЬ: @Veskah указал ToUpper сохраняет байт из-за диапазона номеров, также удалены лишние
()
и пробелРасширение:
($args|% ToUpper|% ToCharArray|sort|get-unique|where{$_-in 65..90}).count/26
Изменяет строку на все
строчныебуквы в верхнем регистре, расширяет массив, сортирует элементы и выбирает уникальные буквы (gu требует отсортированного ввода), сохраняя только символы ascii от97 до 122 (от a до z) от65 до 90 (от A до Z), подсчитать сумму и разделить на 26 для десятичного выводаисточник
R , 47 байт
Попробуйте онлайн!
Преобразует в верхний регистр, затем в кодовые точки ASCII и проверяет значения 65:90, соответствующие A: Z.
источник
scan
не разделять на кавычки, как по умолчанию делает?Сетчатка 0.8.2 , 45 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Строчные буквы и удаление знаков препинания.
Дедуплицировать.
Умножьте на 100.
Добавить 13.
Целочисленное деление на 26 и преобразование в десятичное число.
источник
APL (Dyalog Extended) , 8 байт
Попробуйте онлайн!
слабо на основе ответа Адама
⌈
верхний регистр⎕A∊
логическое значение (0 или 1) вектор длины 26 , который указывает на буквы английского A lphabet находятся в строке⌹∘≤⍨
среднее арифметическое, то есть матричное деление аргумента и вектор все-1 одинаковой длиныисточник
Древесный уголь , 11 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Вывод в виде десятичного числа (или
1
для панграмм). Объяснение:источник
Пакет, 197 байт
Принимает ввод в STDIN и выводит округленный процент. Объяснение:
Введите строку.
Убирайте кавычки, потому что это головная боль в Batch.
Начните с половины буквы для округления.
Удалить каждую букву по очереди из строки. Вызовите подпрограмму, чтобы проверить, изменилось ли что-нибудь из-за способа, которым пакетный анализирует переменные.
Рассчитать результат в процентах.
Начало подпрограммы.
Если удаление буквы изменило строку, увеличьте количество букв.
источник
Пепе ,
155138 байтПопробуйте онлайн! Вывод в десятичной форме.
Объяснение:
источник
K (ок) , 19 байт
Попробуйте онлайн!
J , 30 байт
Попробуйте онлайн!
источник
32!
является слишком широким - это заставляет остальную часть выражения рассматривать некоторые знаки препинания как буквы, например, попробуйте добавить:
в пример вводRetina ,
574635 байт-11 байт, вдохновленные трюком @Neil о добавлении унарных 13 перед делением .
Еще -11 байтов благодаря @Neil напрямую.
Округляет (правильно) до целого числа.
Попробуйте онлайн.
574640 байтов версия, которая работает с десятичным выводом:Те же -11 байтов, а также дополнительные -6 байтов благодаря @Neil .
15.3
15.4
Попробуйте онлайн.
Объяснение:
Преобразовать все буквы в нижний регистр:
Удалить все не-буквы:
Унифицируйте все буквы:
Замените каждое уникальное письмо 1000 подчеркиванием:
Подсчитайте, сколько раз 26 соседних подчеркиваний помещаются в него:
Вставьте точку в правильном месте:
источник
.*
может быть просто.
для сохранения 1 байта, но вы можете сохранить еще 10 байтов, используяD
eduplicate вместо того, чтобы делать это вручную!D
-строить, спасибо! И не уверен, почему я использовал.*
вместо.
.. Спасибо за -11 байт в обеих версиях! :)-1`\B
соответствует желаемой позиции вставки.Java 8,
6259 байт-3 байта благодаря @ OlivierGrégoire .
Попробуйте онлайн.
Объяснение:
источник
c&95
в сочетании сc%91>64
какой-то причиной. Я думаю, что вы уже предлагали этот гольф несколько раз до меня.s->{int r=0,b=0;for(var c:s)if((c&95)%91>64&&b<(b|=1<<c))r++;return r/26.;}
(75 байт)Юлия 1,0 , 34 байта
Использует векторизованную версию оператора ∈, проверяя наличие в строке всех символов в диапазоне от a до z. Затем суммирует полученный битовый массив и делит на общее количество возможных букв.
Попробуйте онлайн!
источник
C 96 байтов
Попробуйте онлайн!
источник
Perl 5
-MList::Util=uniq -p
, 24 байтаПопробуйте онлайн!
источник
Stax , 9 байт
Запустите и отладьте его
источник
u
и используя|b
, но экономия исчезает при упаковке. У меня может быть 8-байт, но онлайн-переводчик странный и глючный.|b
. Он неправильно изменяет свой операнд, а не делает копию. Я создал проблему GitHub для ошибки. github.com/tomtheisen/stax/issues/29 В качестве обходного пути|b
с первого раза будет работать правильно. После этого вам, возможно, придется перезагрузить страницу. Если вы нашли другую ошибку, если вы можете предоставить репродукцию, я, вероятно, смогу ее исправить.v
в начале, вставить|b
послеVa
, запустить, удалить первыйv
, удалить|b
, перепаковать. Да, это ошибка, которую я нашел.Желе , 8 байт
Попробуйте онлайн!
объяснение
источник
JavaScript (Node.js) , 45 байт
Попробуйте онлайн!
JavaScript (Node.js) , 47 байт
Попробуйте онлайн!
источник
Python 3 ,
5149 байт51 -> 49 байтов, благодаря alexz02
Попробуйте онлайн!
источник
lambda s:len({*filter(str.isalpha,s.lower())})/26
Japt , 9 байт
Попытайся
источник
Python 2 , 57 байт
Попробуйте онлайн!
Немного длиннее, чем ответ Python 3 от ArBo, но в любом случае опубликован как другой подход в Python 2.
источник
Рубин
-n
,3834 байта-4 байта от @historcrat!
Попробуйте онлайн!
источник
C, 95 байтов
(примечание: округление вниз)
Альтернативная версия с десятичным возвращением (95 байт):
Это заимствует некоторые из ответа @Steadybox.
источник