VEVO User Account Checker


21

Мы часто видим музыкальные клипы на Youtube. Многие каналы Youtube, на которых размещены музыкальные клипы, «работают на VEVO». Их можно легко идентифицировать, добавив VEVO на миниатюры видео и добавив VEVO к названию канала.

Теперь напишите некоторый код, чтобы проверить, является ли данная пользователем строка учетной записью VEVO или нет.

Требования к действительным строкам учетной записи VEVO:

  • Должен содержать только прописные, строчные и цифры. (без пробелов и знаков препинания)

  • Не должен превышать 80 символов.

  • Должен иметь подстроку "VEVO" в конце строки

Тестовые случаи:

Допустимые входы:

AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO

Неверные данные:

syam kapuk
jypentertainment
Noche de Brujas
testVEVO123

Конечно, потому что это , я ищу самый короткий код, используя любой язык программирования.


4
Хороший первый вопрос! +1
LiefdeWen

12
тест-кейсы: VEVOаūņīčōdēVEVO
дзайма

8
другие предложенные тестовые случаи: test123VeVoи один с более чем 80 символами
Арно

6
Вы должны ждать намного дольше, прежде чем принять лучший ответ; вопрос был только в течение часа, и есть еще много языков, на которых люди могли бы ответить!
Люк Стивенс

5
«прописные, строчные и цифровые символы» требуют определения (я бы предположил (как я полагаю, все уже сделали), что вы имеете в виду A-Za-z0-9; но это может означать все, что может быть в верхнем или нижнем регистре, для пример и и цифры в других алфавитах, например (9)
Джонатан Аллан

Ответы:


9

Python 2 , 45 байт

-3 байта благодаря Роду. -2 байта благодаря овс.

lambda s:len(s)<81*s.isalnum()<'VEVO'==s[-4:]

Попробуйте онлайн!

Решение регулярных выражений оказывается длиннее.

lambda s:re.match('^[^\W_]{0,76}VEVO$',s)
import re

6

Japt v2.0a0, 20 16 байт

Возвращает 1за действительный или 0за недействительный. [\l\d]будет также работать вместо того [^\W_]же количества байтов.

è/^\w{0,76}VEVO$

Попробуй это | Проверьте все тесты

Объяснение : èподсчитывает количество совпадений RegEx на входе. В Japt \wкласс RegEx не содержит подчеркивания.


Хороший. Лучшее, что я мог сделать без регулярных выражений;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions

@ETHproductions, хороший трюк с B+mc:) Кстати, если у Japt2 был класс персонажей для [A-Za-z0-9], мы могли бы победить Retina здесь! Может даже стоить переопределить \w& \W.
Лохматый

Хех, я думаю, что я действительно планировал сделать это первоначально ... Я должен вернуться к работе над Japt в целом: P
ETHproductions

4

JavaScript (ES6), 27 36 34 31 байт

Сохранено 2 байта благодаря @Neil и 3 байта благодаря @Shaggy

s=>/^[^\W_]{0,76}VEVO$/.test(s)

Контрольные примеры


2
Также не \wсоответствует _s?
Нил

Я думаю, ((?!_)\w)экономит 2 байта.
Нил

1
Будет ли [^\W_]работать для сохранения 3 байта ?
Лохматый

@ Шэгги Хек. Почему-то я думал, что такие классы символов не работают в наборах символов. Благодарность!
Арно

У JS нет способа пропустить лямбду? Нравится /^[^\W_]{0,76}VEVO$/.testили что?
полностью человек

4

PHP , 51 байт

-10 байт спасибо @Ismael Miguel за использование <?=вместо <?php echo! и удаление закрывающего тега

<?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));

Попробуйте онлайн!

Спасибо за другие ответы, поэтому мне не пришлось писать регулярные выражения!


1
Вместо этого <?php echoвы можете сделать <?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));.
Исмаэль Мигель

Пожалуйста. Вы можете пропустить закрывающий тег PHP. Цитирую документацию: «Если файл представляет собой чистый код PHP, предпочтительно не указывать закрывающий тег PHP в конце файла». ( php.net/manual/en/language.basic-syntax.phptags.php ). Это должно сэкономить вам еще 2 байта. Кроме того, вместо того [^\W_], чтобы просто использовать \w, что так же, как [a-zA-Z_].
Исмаэль Мигель

1
Спасибо, у меня есть несколько ответов для обновления сейчас!
NK1406

Пожалуйста. Один совет: чтение документации и ознакомление с ней очень поможет.
Исмаэль Мигель


3

C (gcc) , 83 байта

c,i;f(char*s){for(c=i=0;s[i];c+=!isalnum(s[i++]));c=i<81*!c*!strcmp("VEVO",s+i-4);}

Попробуйте онлайн!


Я не вижу никаких returnзаявлений, как это вернуть c? Неопределенное поведение?
MD XF

@MDXF Это действительно неопределенное поведение и злоупотребление тем, как gcc использует одни и те же регистры для назначения переменных и возвращаемых значений (см. Советы по игре в гольф на C ). Это не переносимо и не обязательно работает с другими компиляторами (например, оно не работает с clang)
scottinet

это очень впечатляет. Как ты это узнал?
MD XF

иногда f («VO» также может быть истиной, когда перед сохранением «VI»; или, возможно, ошибка
l4m2

3

Дьялог АПЛ , 47 байт

{0::0⋄(∧/(1(819⌶)t)∊⎕A,⎕D)∧77>≢t←,∘'VEVO'⍣¯1⊢⍵}

Попробуйте онлайн!

Чистое решение регулярных выражений составляет 32 байта , но также гораздо скучнее, чем этот подход.

{0::0⋄(∧/(1(819⌶)t)∊⎕A,⎕D)∧77>≢t←,∘'VEVO'⍣¯1⊢⍵} a dfn with right arg '⍵'
 0::0                                          on error, return 0
                                 ,∘'VEVO'       a train that appends VEVO
                                         ⍣¯1    apply it -1 times
                                               on '⍵'
                                                and error if impossible (which returns 0)
                               t               save on variable 't'
                                               get the length of that
                           77>                  if that's smaller than 77
                          ∧                     and
         (1(819I)t)                              [for each of] 't' uppercased
                   ∊⎕A,⎕D                        is it in the uppercase alphabet concatenated with the digits
       ∧/                                        reduced by and

Вместо того, ⍣¯1чтобы использовать для проверки VEVOи необходимости dfn охранник, вы можете сделать 'VEVO'≡¯4↑⍵. Меня немного заводит{('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
Критиси Литос

@ Cowsquack, да, я мог бы забыть об этом . Есть и другие лучшие способы сделать это испытание (например, ответ Эрикс), и мне нравится эта идея: p
dzaima

3

Грязь , 13 байт

e`n{-76"VEVO"

Попробуйте онлайн!

Здесь нет ничего особенного. Сопоставьте eввод ntire с шаблоном: не более 76 буквенно- nцифровых символов, за которыми следует строка VEVO. Отпечатки 1для матча и 0без матча. Я вспомнил, что последняя кавычка может быть удалена в конце строки, но, очевидно, это просто вызывает ошибку разбора.


3

C # (.NET Core) , 87 + 18 = 105 байт

Попробуйте онлайн!

a=>a.Where(x=>char.IsLetterOrDigit(x)).Count()==a.Length&a.Length<81&a.EndsWith("VEVO")

Разве это не сработало бы, если бы входные данные содержали не буквенно-цифровые символы?
Лохматый

@ Shaggy Вы правы, исправим чуть позже.
LiefdeWen

Я проверил с TIO и обнаружил, что вход «ConnieTalbotVEVO» (который должен быть допустимым вводом) был ложно объявлен как недопустимый ввод.
Bagas Sanjaya

@BagasSanjaya Это потому, что я помещаю после него вкладки в тестовом примере, вынимаю вкладки, и он будет таким же, как тестовый пример выше, и будет работать.
LiefdeWen

73 + 18: a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")только буквы ASCII или 67 + 18: a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")с поддержкой юникода
dg3

2

> <> , 147 125 байт

!\i:0(?^1[::::::"/9@Z`z"!
;>{(?;{(?v{(?;{(?v{(?;{(?v
 ~l1-?!v >       > !|!: !<
;v    ]/~l99*-0(?!;4["OVEV"{-?;{-?;{-?;{-?;1n

Попробуйте онлайн!

> <> , 147 байт

Попробуйте онлайн!

Это печатает 1, если входная строка является допустимой и ничего для недопустимого ввода.

Редактировать 1: Изменены буквенно-цифровые проверки для использования диапазонов, а не сравнения с каждым символом. (экономя 22 байта)


Сейчас у меня нет времени играть в гольф, но я уверен, что вы можете терять байты, сравнивая коды символов. Суть этого состоит в том, чтобы отвергнуть вещи меньше «0» и больше «z», а затем отвергнуть вещи между «9» и «A», а также между «Z» и «a».
Коул

@cole: - Я не был на моем компьютере, чтобы изменить это вчера после публикации, но вы правы, сравнения действительно обрезаны. Я уверен, что если вы сканируете код, вы сможете сбросить лишние байты.
Тил пеликан

2

Баш, 53 26 30 байт

[[ $1 =~ ^[^\W_]{0,76}VEVO$ ]]

Выйдите код 0 для недействительных результатов и 1 для недействительных результатов.

Все еще работаю на 80 символов или меньше.

-27 байт при удалении вывода благодаря @KeyWeeUsr

+4 байта, исправлено регулярное выражение (как и все остальные)

Попробуйте онлайн!


Вы можете просто echo 1за правду или просто идти без всякого эха. Не нужно ничего &&||
повторять, так

Хорошо, я не был уверен, какой вывод (если есть) требуется. Вопрос на самом деле не сказал.
Вероятно,

Идея «правдивости» объясняется здесь codegolf.meta.stackexchange.com/q/2190/16658 и обычно подразумевается повсеместно, если не указано иное
Сирены

Это ничего не выводит на TIO. Кроме того, ваш RegEx допускает подчеркивание, чего не следует делать. И вы не проверяете длину. Мы требуем, чтобы решения были полностью функциональными, незавершенные работы не должны публиковаться. Я бы порекомендовал удалить его, пока вы не сможете решить проблемы. (Относительно примечания: почему люди отдают предпочтение решениям, которые явно не работают?)
Shaggy

@Shaggy Выход через код выхода.
полностью человек

2

> <> , 101 89 83 81 94 байта

Изменить: переключен на проверку не буквенно-цифровых символов, а не буквенно-цифровых. Переключился назад, потому что я забыл проверить между Z и a. Спасибо @Emigna. Разорвать эти потерянные байты, хотя

Редактировать 2: Кроме того, я могу полностью избавиться от них}}}}. Спасибо Teal pelican за это и обнаружил проблему с TIO

Изменить 3: заменил ~~~ на ap

!\i::0(?v:::"/")$":"(*$:"`")$"{"(*+$:"@")$"["(*+?
0/?("S"l/
l/"VEVO"[4pn?$0(6
!\{-?vl?
1/;n0/n

Я не знаю , почему это не будет работать на TIO, но он отлично работает здесь . Проблема заключалась в том, что команды {} в TIO не работают для пустого списка. Попробуй здесь

Как это работает

!\i::0(?v:::"/")$":"(*$:"`")$"{"(*+$:"@")$"["(*+?
0/....../
......... Checks each input is alphanumeric
...       If any isn't, print 0 and exit with an error
...

...
0/?("S"l/ Checks if there are more than 80 characters
...       If so, print 0 and exit with an error
...
...

...
...
l/"VEVO"[4pn?$0(6 Check if the input is less than 4 characters
...               If so, print 0 and exit with an error
...

...
...
./"VEVO"[4pn?$0(6 Take the last 4 characters of the input into a new stack (first time I've actually used [)
...               Add "VEVO" to the stack to compare
...

...
0/....../n
........V
!\{-?vl?  Check if the last 4 characters are VEVO
1/;n0/n   Print 1 and exit with an error if so, else print 0 and exit

Для согласованности, замены; в последней строке недопустимая инструкция делает каждый вывод ошибкой.


Я полагаю, что ваша ошибка TIO может заключаться в том, как она работает с упорядочением по окончанию разделения стека. TIO ССЫЛКА ЗДЕСЬ Имея беспорядок в TIO, вы можете изменить его на это.
Тил пеликан

Спасибо @Tealpelican. Исправил это и убил еще несколько байтов
Джо Кинг

Вам не хватает проверки на символы между "Z" и "a".
Emigna

@ Emigna Ой, спасибо! Исправлена!
Джо Кинг

2

C ++, 129 105 102 байта

Благодаря другим ответам, которые показали мне, что я могу посчитать количество символов
-2 байта благодаря Zacharý

#include<regex>
int v(std::string s){return std::regex_match(s, std::regex("[a-zA-Z0-9]{0,76}VEVO"));}

TIO LINK


Где ссылка TIO на ваш ответ? Я хотел бы проверить ваш код ...
Bagas Sanjaya

Простите, если это недостаток знаний C ++. Можете ли вы переместить удалить переменную rи просто включить регулярное выражение в вызове std::regex_match?
Захари

После запятой есть
лишний пробел

Вы можете убрать запятую через пробел после запятой.
Захари



1

Java (OpenJDK 8) , 37 36 байт

Довольно простой ответ, используя несколько прекрасных регулярных выражений.
Вполне возможно, самый короткий ответ Java, который я когда-либо делал.
-1 байт благодаря Нейлу в ответе на Javascript

w->w.matches("((?!_)\\w){0,76}VEVO")

Попробуйте онлайн!





1

V , 17 байт

ø^¨áüä©û,76}VEVO$

Попробуйте онлайн!

HexDump:

00000000: f85e a8e1 fce4 a9fb 2c37 367d 5645 564f  .^......,76}VEVO
00000010: 24                                       $

Сжатые регулярные выражения для победы!

ø                   " Count the number of matches of
 ^                  "   The beginning of the line
  ¨áüä©             "   A letter or number...
       û,76}        "   From 0 to 76 times...
            VEVO    "   Followed by "VEVO"
                $   "   At the end of the line





1

Perl 5 , 35 29 + 1 (-a) = 30 байт

-6 байт благодаря ETHproductions

Добавлено 4 байта. Не видел, что подчеркивание не было разрешено.

Это мой первый гольф, так что надеюсь, я все сделал правильно.

Возвращает 1, если действует, 0, если нет.

print/^[^\W_]{0,76}VEVO$/?1:0

Попробуйте онлайн!


1
Добро пожаловать в PPCG! Вы можете удалить посторонние пробелы, чтобы получить до 25 (+1) байтов:print/^\w{1,76}VEVO$/?1:0
ETHproductions

+0преобразует bool соответствия в число, а не ?1:0сохраняет 2 байта. Звонок с -pleпринтами $_для вас. Итак: perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'. 25 байтов. Если вы счастливы получить пробелы на несовпадающих строках, $_=/^[^\W_]{0,76}VEVO$/это 23 байта.
Фил Х

0

Google Sheets, 33 байта

Функция анонимного рабочего листа, которая принимает данные из диапазона A1и выводит их в вызывающую ячейку

=RegexMatch(A1,"^[^\W_]{0,76}VEVO

Где закрывающая скобка?
Bagas Sanjaya

@BagasSanjaya - одна из замечательных особенностей Google Sheets, она автоматически заполняет незакрытые строки и группы. Поэтому, когда это вставляется в ячейку, и вы либо щелкаете по ячейке, либо нажимаете Enter, GS преобразует это =RegexMatch(A1,"^[^\W_]{0,76}VEVO")без обратной связи с пользователем и выполняет
Taylor Scott

-1

Clojure , 146 байт

(fn[u](let[c count](and(<(c u)81)(=(c(filter #(let[i(int %)](or(< 47 i 58)(< 64 i 91)(< 96 i 123)))u))(c u))(clojure.string/ends-with? u"VEVO"))))

Попробуйте онлайн!

Это было бы намного короче с использованием регулярных выражений, но я подумал, что делать это вручную было бы более интересно.

(defn vevo? [username]
  (and (< (count username) 81)

       ; Filter out the illegal characters, then check if the length is the same as the original string
       (= (count (filter #(let [i (int %)]
                            ; Make sure the char code is in the valid ranges
                            (or (< 47 i 58) (< 64 i 91) (< 96 i 123)))
                         username))
          (count username))

       (clojure.string/ends-with? username "VEVO")))

Любая ссылка TIO для тестирования?
Bagas Sanjaya

@BagasSanjaya Я могу добавить один в немного. Похоже, что добавление ссылок TIO теперь стандартно. В прошлый раз, когда я часто пользовался сайтом, они были необязательными, но теперь все их добавляют.
Carcigenicate

@BagasSanjaya Я добавил ссылку. К сожалению, TIO кажется сломанным. Он не может найти ends-with?функцию, даже если это часть стандартной библиотеки.
карцигеникат
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.