Напишите функцию или программу, которая принимает в качестве входных данных строку и печатает истинное значение, если строка представляет собой панграмму (последовательность букв, содержащую хотя бы одну из каждой буквы в английском алфавите), и значение false в противном случае.
Регистр букв следует игнорировать; Если строка есть abcdefghijklmnopqrstuvwXYZ
, то функция все равно должна возвращать истинное значение. Обратите внимание, что строка может содержать любые другие символы, поэтому 123abcdefghijklm NOPQRSTUVWXYZ321
вернет истинное значение. Пустой ввод должен возвращать значение Falsey.
Контрольные примеры
AbCdEfGhIjKlMnOpQrStUvWxYz
==> True
ACEGIKMOQSUWY
BDFHJLNPRTVXZ
==> True
public static void main(String[] args)
==> False
The quick brown fox jumped over the lazy dogs. BOING BOING BOING
==> True
Это код гольф. Стандартные правила применяются. Самый короткий код в байтах побеждает.
code-golf
string
decision-problem
Арктур
источник
источник
Ответы:
Pyth, 7 байт
Объяснение:
Попробуйте полную программу, однострочную версию здесь .
источник
L!-Grb0
.!-Grs.z0
также будет работать, но дольше.Perl 6 , 20 байт
использование:
Я использовал 3-байтовую "французскую" версию (
⊆
)U+2286 SUBSET OF OR EQUAL TO
оператора вместо 4-байтовой "техасской" версии ((<=)
), которая также потребовала бы дополнительного пространства перед ним.источник
GS2,
119 байтСпасибо @MitchSchwartz за 2 байта в гольфе!
Исходный код использует кодировку CP437. Попробуйте онлайн!
Как это работает
источник
m2
(\xe9
) сохраняет 2 байта.JavaScript ES6, 51
57Редактировать 6 байт сохранить thx @ user81655
Тестовый фрагмент
источник
a.replace(/[^A-Z]|[^a-z]/g,'')
илиa.replace(/[^A-Z]/gi,'')
работать?A
иa
должен стать таким же символом, иначе набор будет сохранять их как отличные, и размер будет> 26[...a.toUpperCase().replace(/[^A-Z]/g,'')].length>25
?R
50,4639 байтРедактировать отбрасывает необходимость
tolower
путем добавленияignore.case=TRUE
(T
)источник
ignore.case=TRUE (T)
быть включен в подсчет?T
как конец, благодаря сопоставлению размещения аргументов нет необходимости фактически указывать имя аргумента (иT
является псевдонимом по умолчанию дляTRUE
). Код, написанный здесь, выполняет необходимые действия как есть, без необходимости что-либо добавлять.О, 11 байт
Попробуйте онлайн.
К сожалению, O не имеет установленной разницы: /
объяснение
источник
Юлия, 38 байт
Это просто -
lowercase
имеет дело с заглавными / строчными буквами,'a':'z'
содержит все строчные буквы,∩
является пересечением, удаляет любой символ, который не является буквой и, поскольку'a':'z'
идет первым, будет иметь только одну из каждой буквы, которая появляется вs
.endof
это кратчайший способ получить длину полученного массива, и если он равен 26, то это панграмма (она не может быть больше 26 и>25
сохраняет байт относительно==26
).источник
Python 2,
5351 байтАльтернативные решения:
Спасибо xnor за указание на то, что у множеств есть
<=
оператор, для альтернативы 51:источник
lambda s:set(range(65,91))<=set(map(ord,s.upper()))
и для 51.p=lambda s:{*range(65,91)}<={*map(ord,s.upper())}
. Кстати, я не могу найти какие-либо правила о том,lambda
нужно ли присваивать (как в вашем первом случае) или нет (как в ваших последующих). Помогите?Сетчатка , 22 байта
Попробуйте онлайн.
Первая строка соответствует любой букве, которая больше не появляется позже в строке. Это гарантирует, что мы не сопоставляем каждую букву не более одного раза, независимо от того, как часто она встречается. Режим соответствия по умолчанию заменяет строку на количество найденных совпадений. Таким образом, на втором этапе мы сопоставляем
26
результат первого ввода, который даст либо0
или1
, в зависимости от того, нашли ли мы максимум 26 совпадений или нет.источник
Минколанг 0,14 , 18 байт
Попробуй это здесь.
объяснение
источник
Python 3.5, 47 байт
Тот же принцип, что и в ответе Митча Шварца , но с использованием улучшений PEP 0448 для
*
распаковки, впервые представленных в Python 3.5.Эта версия немного отличается от того, что я написал в своем комментарии к сообщению Митча, в том, что я превращаю цифры в буквы, а не наоборот. Это потому, что именно так я и написал свои первоначальные попытки найти решение, прежде чем обнаружил, что не смогу обойти Митча, не скопировав его подход. Так что учтите, что подправьте мою единственную оставшуюся часть оригинальности!
источник
Руби,
4133использование
Спасибо Васу Адари за то, что он спас мне 8 байт
источник
R,
5345 байтСтарая версия на 53 байта:
Использование:
источник
MATLAB / Octave ,
3533 байтаПопробуйте онлайн!
Анонимная функция возвращает логический 1, если вход
x
является панграммой, или логический 0, если это не так.По сути, он использует тот же подход, что и решение Pyth @ ThomasKwa. Разница между всеми символами в верхнем регистре букв алфавита (
65:91
) и входной строкой (преобразуется в верхний регистр). Любые символы в алфавите, но не во входной строке, возвращаютсяsetdiff
. Только если массив, возвращенный заданной разностью, пуст, строка является панграммой.Использование верхнего регистра вместо нижнего регистра экономит пару байтов по сравнению с
'a':'z'
тем, что вместо этого можно использовать значение ASCII для создания диапазона.источник
Haskell ,
59565351 байтПопробуйте онлайн!
Объяснение:
Дайте входную строку
s
для каждогоa
в диапазоне от 65 до 90 (в ASCII коды ,A
чтобыZ
) проверяется ли какой - либо символ вs
равен либоa
(верхний регистр символов) илиa+32
(нижний регистр символов), преобразуется в символ с помощьюtoEnum
. Это создает список логических значений.and
проверяет, все ли ониTrue
.Старая версия:
Для каждой буквы алфавита в верхнем регистре проверьте,
s
равна ли ей какая-либо буква в верхнем регистре.any(==a)s
аналогично,elem a s
но позволяет изменять элементыs
перед сравнением - в этом случае скрыть их нужно в верхнем регистре.источник
Japt , 14 байт
Попробуйте онлайн!
Как это работает
источник
CJam, 11 байт
Это полная программа. Попробуйте онлайн .
Объяснение:
источник
Javascript,
110109999593 байтовСэкономили 6 байтов благодаря Томасу Ква и 10 благодаря частично ev3.
источник
for(i=65;i++<91;)b+=!~a.indexOf(String.fromCharCode(i));alert(!b)
?05AB1E , 4 байта (вероятно, не конкурирующие)
Попробуйте онлайн!
источник
2sable ,
65 байт6-байтовая версия:
Попробуйте онлайн!
Объяснение:
5-байтовая версия, вдохновленная ответом 05AB1E компании carusocomputing :
Попробуйте онлайн!
Объяснение:
источник
Брахилог , 4 байта
Попробуйте онлайн!
источник
TeaScript , 12 байт
Первая запись TeaScript с тех пор, как я убил TeaScript: p
Попробуйте онлайн
Ungolfed
источник
JavaScript ES6,
124114113 байтовЯ уверен, что это может быть в гольфе больше.
Создает анонимную функцию.
источник
C 107 байтов
источник
ES6, 68 байт
Эта строка выглядит ужасно расточительной, но я не знаю лучшего способа.
источник
s=>[...Array(x=9,26)].every(z=>RegExp((++x).toString(36),"i").test(s))
Scala,
594846 байтисточник
Баш,
4542 байта41-байтовая программа, плюс 1, потому что она должна вызываться с помощью
bash -e
:Удивительно, но мне удалось ответить на Bash без кавычек! (да, я проверил с вводами, начинающимися с
-f
и тому подобное).Это предполагает локаль, где строчные латинские буквы являются смежными от
a
доz
. Ввод осуществляется через первый аргумент программы.Как это работает, для каждой буквенной буквы
$i
мы проверяем, содержит ли строка$i
или ее эквивалент в верхнем регистре${i^}
, удаляя все остальные символы. Если это приводит к пустой строке, то входные данные не содержат этой буквы, и мы завершаем работу с1
(false). Если у нас есть непустой результат, то мы прошли тест и переходим к следующей букве. Если входная строка содержит каждую английскую букву, мы достигнем конца программы, выйдя, таким образом, с0
(true).источник
Perl 5, 33 байта
источник
-pl61e '$i=$_;map$\*=$i=~/$_/i,a..z}{'
.PlatyPar , 14 байт
Пояснение (функция визуализации стека в ближайшее время!):
Если бы у меня была смешная функция «нажать все буквы алфавита», это было бы 10 ...
Попробуйте онлайн !
источник
Пайк, 6 байт
Попробуй это здесь!
источник