В некоторых версиях стандартного приложения для калькулятора Android вы можете нажать клавишу, например «sin», а затем клавишу «del», чтобы сделать ее «si». Вероятно, это просто ошибка, которую они не могут устранить.
Можно вводить следующие буквы / буквенные группы:
грех си s соз Колорадо с загар та T пер L журнал вот е
Таким образом, «безвкусный» является типичным, потому что ta-steless, как и «засорение», потому что «c-log-s». Однако «get» не может быть напечатано, также как «an» или «xyz».
Напишите программу, которая принимает одно слово (или последовательность букв, только az на входе) в качестве входных данных и производит вывод, чтобы указать, является ли слово типизированным или нет.
Вывод может быть один символ / буква / цифра / и т. Д. или это может быть больше. Все вводимые слова должны давать одинаковый вывод. Все нетипизированные слова также должны выдавать одинаковый результат.
PS Просто из любопытства, «безвкусно» самое длинное словарное слово, которое можно набрать?
источник
Ответы:
Perl,
474341 + 1 = 42 байта-4 байта благодаря @Sunny Pun. -2 байта благодаря @Brad Gilbert b2gills и @Downgoat
Беги с
-n
флагом.Это определенно может быть и дальше, но в духе соревнований я оставляю в основном оригинальное регулярное выражение, которое я придумал в начале. Ничего не возвращает, если true,
1
если false.Попробуйте онлайн!
Я скачал файл словаря, и самое длинное слово, которое я нашел, было 11 букв -
tattletales
источник
co?
должно быть достаточно, так какsin
буду заботиться оs
:) Приятно играть с/log?/
!i
) или что единственный результат должен иметь смысл (удалить один!
)/^(s|sin?|co?|t|tan?|ln?|log?|e)+$/
или если вы предпочитаете:/^([celst]|sin?|co|tan?|ln|log?)+$/
JavaScript (ES6), 44 байта
Я думаю, что это самое короткое регулярное выражение, но, конечно, я могу ошибаться.
объяснение
Первым очевидным местом для начала было бы регулярное выражение, которое просто включает все параметры отдельно:
Во-первых, мы можем наблюдать, что
cos
может быть сформировано изco
иs
, делая это ненужным:Некоторые из них, такие как
sin
иsi
, можно объединить, сделав последнюю букву необязательной:Это работает, потому что
sin?
совпадаетsi
с или безn
на конце, таким образом покрываяsin
иsi
.Там, кажется,
n?
тоже много с. Что если мы соберем их всех вместе?Еще один способ игры в гольф состоит в том, чтобы объединить оставшиеся опции с одним символом в диапазон символов, но это получается при той же длине:
И вот как вы играете в гольф простым регулярным выражением. Я считаю, что это самое короткое из возможных регулярных выражений, которое соответствует каждой строке правильно, но, возможно, нет. Я награжу +100 наградой любому, кому удастся улучшить это регулярное выражение.
источник
^(s|t|co?|(l|ta|si)n?|log?|e)+$
/ /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/)
.a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.test
за 42 байта. Я считаю, что это разрешено, потому чтоa.test
это анонимная функция.f=a.test
что не работает. Интересно, допустимо ли звонить с альтернативным именем,a.test
хотя ...Pyth,
37332928 байтКод содержит непечатаемый символ, поэтому здесь есть
xxd
hexdump.Попробуйте онлайн.
Крайнеастрономически неэффективно. Пространственно-временная сложностьO (16 n )O (24 n ).объяснение
Во-первых,
Q
неявно добавляется.источник
s
.Желе ,
3231302826 байтВыводит 0, если слово можно ввести, и 1, если нет. Спасибо @JonathanAllan за отыгрывание 1 байта!
Попробуйте онлайн!
Как это устроено
источник
Брахилог , 33 байта
Исправлена ошибка благодаря @Synoli.
Попробуйте онлайн!
Выходы,
true.
если типизируемые илиfalse.
нет.объяснение
Мы пытаемся деконкатенировать ввод, пока не найдем тот, для которого все строки, которые мы объединяем, являются префиксом одной из
["sin", "cos", "tan", "log", "lne", "eee]
.источник
.
послеtrue
?true.
иfalse.
иначе. я просто переопределил это: если вывод игнорируется (как здесь) и нет записи в негоSTDOUT
, то он будет печататьсяtrue.
или вfalse.
зависимости от того, будет ли основной предикат успешным или нет. Он имеет точку в SWI-Prolog , потому чтоtrue.
иfalse.
в самом деле действующие программы , которые всегда удается / всегда терпит неудачу.tan
явного появления в списке?Perl 6 ,
60 5044 байтовпервая попытка ( 60 )
перевод Perl 5 ответа ( 50 )
используя
-n
переключатель ( 43 + 1 )Первый
?
преобразует результат в логическое значение, а первый+
преобразует его в число (1
дляTrue
,0
дляFalse
)источник
Mathematica, 101 байт
Кажется, что сложная часть этой задачи состоит в том, чтобы найти самое короткое регулярное выражение и выбрать самый краткий язык, соответствующий этому регулярному выражению. У меня нет ничего, чтобы поспособствовать первому, и Mathematica не является хорошим кандидатом на второе, так как вы должны использовать
StringMatchQ
иRegularExpression
. Что я могу сделать, это ответить на ваш PS: «безвкусно» самое длинное слово, которое вы можете напечатать?Так что "tattletale" кажется самым длинным на одного персонажа.
источник
True
илиFalse
вместо одного символа.Чудо , 41 байт
Использование:
Раньше совершенно неправильно понял вопрос, но теперь все решено. Выходы
F
на совпадение иT
на отсутствие совпадения.Неконкурентный, 35 байт
Использование:
Это использует применимые регулярные выражения, которые были реализованы после этой задачи.
источник
n
не для ввода, ноsin
иln
есть.sa
как истинноеgot
.?
Сделать выражение к югу послушными; см. rexegg.com/regex-quantifiers.html#cheat_sheet . Но даже если сделать его жадным??
или?+
притязательным, по какой-то причине не работает (по крайней мере, в PHP).coelostats
вызывает ловушку (вlo
иta
).Обработка, 223 байта
Наконец решил сделать ответ без регулярных выражений. Для вызова функции используйте
l("tasteless");
. Возвращает0
за ложь и1
за истину.Расширенный код с объяснением
По сути, мы перебираем данную строку,
b
собирая char по char. Мы проверяем , используя ,d()
если какой - либо изtan
,log
... начать сb
. Если это так, то это действительно. Иначе, мы проверяем, является ли символ в этой позиции действительным, и сбрасываемb
. Теперь, если он недействителен,0
будет возвращен, иначе он все равно будет действительным. В конце, если программа еще не возвратила что-то, вернитесь1
.источник
d
функция возвращатьbool
?boolean
чемint
. Такжеtrue
иfalse
требуется больше байтов, чем1
и0
Скала, 49 байт
Возвращает true, если данная строка соответствует регулярному выражению, иначе false.
источник
Python 3 , 154 байта
Попробуйте онлайн!
источник
Python 3 ,
149130 байтправка №1: побрили 19 байт, используя решение @Henke
источник
Python 2, 124 байта
источник
PHP, 60 байт
регулярное выражение, украденное из ETHproductions :
принимает входные данные из аргумента командной строки; печатает
1
для печатного,0
для не печатного.старые версии,
757369 байтзаменяет все возможные слова пустой строкой, возвращает результат, отрицает.
разбивает ввод по совпадениям регулярных выражений. Флаг
1
обозначаетPREG_SPLIT_NO_EMPTY
и говоритpreg_split
только о возврате непустых результатов. Если ввод вводимый, онpreg_split
будет иметь только пустые результаты, поэтому он возвратит пустой массив, что неверно.!
сводит на нет результат.Обе версии принимают входные данные из аргумента командной строки
и печатают,
1
если результат пуст (ввод вводим), иначе ничего.Примечания:
упаковка с использованием регулярных выражений
?
здесь не работает; это делает выражения неловкими; вероятно из-за возврата. И порядок альтернатив важен:ta
должен стоять раньше,t
иначе двигатель перестанет совпадать, когда найдетt
.Я нашел шпаргалку , подумал
??
или?+
мог бы помочь; но они не работают для меня.источник
Java 8, 55 байт
Disclamer: я использовал регулярное выражение ETHproductions, потому что оно было на много байтов короче моего. Полный кредит на регулярное выражение ему. Я добавил 24 байта, чтобы сделать его функцией Java.
Возвращает,
false
если слово не вписывается в регулярное выражение, иначеtrue
.источник