В этом кодовом соревновании по гольфу вы проверите хэштеги!
#What_your_code_should_do
Ввод - это строка. Выведите истинное значение, если оно является допустимым хэштегом, и ложное значение в противном случае.
Мы определяем строку как действительный хэштег, если ...
- Начинается с хеша (
#
). - Он не имеет номера сразу после хэштега (например
#2016USElection
, не является действительным хэштегом). - Он не имеет каких-либо «специальных символов» (т. Е. Любых символов, которые не являются алфавитом, подчеркиванием (
_
) или числом).
Вы можете предположить, что ввод содержит только символы ASCII. (Было бы несправедливо, если бы мы сделали Unicode тоже.)
#rules
Применяются основные правила игры в гольф .
#Примеры
Truthy:
#
#e
#_ABC
#thisisanunexpectedlylongstringxoxoxoxo
#USElection2016
Falsy:
Hello, World!
#12thBday
#not-valid
#alsoNotValid!
#!not_a_hash
code-golf
string
decision-problem
Laikoni
источник
источник
#
ли действительный хэштег?#öäü
действительным?#
не является действительным хэштегом для любой системы, Facebook или Twitter, он также нарушает установленные правила, и я не уверен, что #_ABC снова действует на них, но я не уверен в этом.an alphabet
означает ASCII прописными или строчными буквами? то естьabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
?Ответы:
Сетчатка , 12 байт
Принты
1
для хэштегов и0
прочее.Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
Не так много , чтобы объяснить здесь, это вполне буквальное осуществление определения:
^
и$
просто анкеры , обеспечивающие , что матч охватывает всю строку,#
проверяет , что строка начинается с#
,(?!\d)
гарантирует , что следующий символ не является цифрой (без опережения положение механизма регулярных выражений),\w*
проверяет, что мы можем достичь конца строки с нулем или более букв, цифр или подчеркиваний.По умолчанию Retina подсчитывает количество совпадений данного регулярного выражения, поэтому это дает
1
действительные хеш-теги и т0
. Д.источник
(?!\d)
есть(?=\D)
... но я не знаю, как ты написал Retina. Можно ли использовать(?\D)
без=
и сохранить байт? (Если нет, стоит ли редактировать язык так, чтобы это было выполнимо?)(?!\d)
отличается от(?=\D)
того, что последний требует некоторого символа после текущей позиции, в то время как первый удовлетворяется концом строки. Вне зависимости от этого, настройка аромата регулярных выражений в настоящее время невозможна (так как я просто передаю регулярные выражения в движок регулярных выражений .NET), но внесение таких изменений находится на дорожной карте где-то (очень далеко) вниз по линии.=
необязательным. Весь(?...)
синтаксис был выбран для расширяемости, так как символ после?
никогда не является необязательным и определяет, какая это группа, и я не думаю, что хочу отказаться от этой расширяемости.(?{
и(??
и(?<
(и для захвата групп и для наблюдения за) и(?-
и,(?1
и, конечно, основной(?:
. И, может быть, я пропустил.Perl, 22 байта
21 байт код +1 для
-p
Печатает 1, если это допустимый хэштег, в противном случае - пустая строка.
использование
Спасибо за 2 байта за Мартина Эндера (и еще 4 за использование его метода поиска )
Perl, 18 байт
17 байт код +1 для
-p
Используя взгляд Мартина, это может быть намного короче!
источник
JavaScript (ES6), 25 байт
источник
C, 80 байтов
Функция
f()
принимает строку в качестве аргумента и изменяет ееint *b
на 1 или 0, чтобы указать истинность / ложь.Если строка всегда имеет хотя бы один символ (т.е. никогда не пустую строку), байт можно сбрить на 79 байтов:
источник
Python 3, 41 байт
источник
None
ложны, я думаю, что отбрасыватьbool()
это нормально.re.compile('#(?!\d)\w*$').match
? Это приемлемо, чтобы броситьf=
, кстати.Брахилог , 55 байт
Это не использует регулярные выражения.
объяснение
источник
Python 3,
10393 байта#
СуществоTrue
убило меня здесь, я должен был перечислить строку , чтобы избежать ошибок индекса на одном вводе символов.источник
isalpha()
метод моего ответа py3: D "#", будучи правдой, также уничтожил меня.PowerShell v2 +, 25 байт
Используя регулярное выражение Мартина , только что завернутый в
-match
оператор PowerShell вместе с вводом$args
. Для значений truey / falsey это вернет саму строку в совпадении (истинное значение) или ничего в несоответствии (значение falsey). Это потому, что когда оператор сравнения применяется к массиву, он возвращает все, что удовлетворяет этому оператору.Пара примеров (завернутых в
[bool]
приведение, чтобы сделать вывод более ясным):источник
Mathematica,
524643 байтаСохранено
69 байт благодаря @MartinEnder .Функция. Принимает строку как ввод и возвращает
True
илиFalse
как вывод. Довольно просто, просто совпадает с регулярным выражением/#(?!\d)\w*/
.источник
hello#world
поскольку у вас нет начальных и конечных якорных строк. Я не знаю Mathematica, хотя я не уверен.Дьялог АПЛ ,
2220 байтБез RegEx:
-2 благодаря ngn
источник
Python 2, 79 байт
Первая попытка игры в гольф. Безголовая версия:
источник
Октава,
37565443 байтаСпасибо @LuisMendo за удаление 8 байт!
Не очень гольф, но очень встроенный.
Редактировать: исходный код принимал строки без начального '#'. Я думаю, я должен был придерживаться регулярных выражений.
Тестовый набор на ideone .
источник
Python3 -
156128 байтРешение, которое не использует регулярные выражения. 0 - ложь, а все остальные значения правдивы.
Спасибо @LeakyNun за сохранение байтов!
источник
+0
послеn[1:]
, но, к сожалению, по-прежнему не работает: / дал false "#d".+0
но не удалось выполнить «#d». Я все же проверил его на Python3. Не уверен, будет ли он работать на Python2IndexOutOfRange
для "#" иFalse
для "#d".lambda n:n=="#"or(n[0]=="#")*all(any([47<ord(c)<58,64<ord(c)<91,ord(c)==95,96<ord(c)<123])for c in n[1:]+"0")*~(47<ord(n[1])<58)
для 128 байтов. Доказательство того, что это работаетЛуа,
595554 байтаКод
Как это работает:
#
.Принимает ввод из командной строки. Печатает,
true
если строка является допустимым хэштегом, в противном случае она печатаетnil
.источник
Google Sheets, 30 байт
Функция анонимного рабочего листа, которая принимает входные данные из ячейки,
A1
проверяет их на соответствие выражению RE2 и выводит результат в вызывающую ячейку.источник
05AB1E , 18 байт
Код:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
Sed 19 + 2 = 21 байт
Это отфильтровывает все не хэштеги и выводит действительные хэштеги.
Запустить как
sed -rn "/^#$|^#[a-z]\w*$/Ip"
. Выйти с Ctrl+ D(отправить EOF).источник
GNU grep, 15 + 2 = 17 байт
Тест:
Выход:
источник
Python 3, 97 байт
70 байт 56 байт(Код изменен)
Человек читаетсяисточник
lambda x:all(True==[x[0]=="#",x[1].isalpha(),x[2:].isalpha()])
isalpha
?Пайк, 19 байт
Попробуй это здесь!
Быстрое исправление на сегодня
источник
#123
по-прежнему ничего не возвращает, не должен возвращать 0?Рубин, 16 +
31 (n
флаг) =1917 байтИспользуется
0
как правдивый иnil
как ложный.Запустите это как
ruby -ne 'p~/^#(?!\d)\w*$/'
. Спасибо @manatwork за исправление ошибки bash при запуске программы.источник
!
, см. Event Designators в man bash.)Стандарт ML ,
121118107 байтПопробуйте онлайн! Функциональное решение без использования регулярных выражений. Объявляет анонимную функцию, которая связана с неявным идентификатором результата
it
.источник
isAlphaNum$orelse
это довольно угрожающе ...orelse
иandalso
.AlphaNum
,orelse
!! (orelse what?
)o explode
конец тоже довольно угрожающий ...Excel VBA, 54 байта
Функция анонимного непосредственного окна VBE, которая принимает входные данные из ячейки
[A1]
, проверяет, соответствует ли значение ячейкиLike
шаблону и выводитBoolean
ли это в непосредственное окно VBEисточник
Haskell , 79 байтов
Попробуйте онлайн!
источник
C #, 92 байта
C # lambda (
Predicate
), где input - это a,string
а output - этоbool
.Попробуйте онлайн!
источник
Луа, 39 байт
Простая копия пасты описания матча. Выводит ложь,
nil
если не хэштег, иначе выводит правдивый хэштег.Может быть сокращен еще на один байт,
find
если вывод списка из двух значений (что является правдой) не нарушает правила.источник
#
по себе.#
то хэштег в Твиттере или Фейсбуке, не имеет отношения к этой проблеме. Спецификация очень ясно#
показывает тот факт, что для этой задачи следует рассматривать хэштег. И хотя я не проверил все ответы, все, что я проверил , принимают#
как хэштег, так что я не уверен, на какие топовые ответы вы ссылаетесь.Clojure,
130135132 байта+5 байт, чтобы иметь дело с NPE, который произошел, когда строка состояла только из хэштега.
-2 байта при использовании
Character/isLetterOrDigit
.Ungolfed:
источник
Java 8,
575428 байтОтвет Retina на порт Мартина Эндера, чтобы сохранить несколько байтов и сопоставить добавленные тестовые примеры.
Не
String#matches
всегда соответствует всей строке, поэтому нет необходимости^...$
.Попробуй это здесь.
источник