Перевірка облікових записів користувачів VEVO


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
dzaima

8
інші запропоновані тестові випадки: test123VeVoі один з більш ніж 80 символами
Арнольд

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

5
"великі, малі та знакові символи" вимагають визначити (я вважаю, (як, я вважаю, все це вже було зроблено), що ви маєте на увазі A-Za-z0-9; але це може означати все, що може бути великим або малим, приклад та цифри в інших алфавітах, наприклад (9).
Джонатан Аллан

Відповіді:



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, приємний трюк з 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-х байт ?
Кудлатий

@Shaggy Heck. Я чомусь думав, що такі класи персонажів не працюють у наборах символів. Спасибі!
Арнольд

Хіба у 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 ). Це не портативно і не обов'язково працює з іншими компіляторами (наприклад, він не працює з
кланг

це дуже вражає. Як ви це дізналися?
MD XF

іноді f ("VO" також відповідає дійсності, коли раніше зберігається "VI"; або, можливо, помилка
l4m2

3

Діалог APL , 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 Так, я, можливо, забув про це . Є й інші кращі способи вирішити цей виклик (тобто відповідь
Ерікса

3

Грим , 13 байт

e`n{-76"VEVO"

Спробуйте в Інтернеті!

Тут нічого фантазії. Матч eвходу ntire проти схеми: в більшості 76 альфа numeric символів, за яким слідує рядок 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

@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")з підтримкою unicode
17:30

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 для результатів VALID та 1 для результатів INVALID.

Все ще працює над 80 символами або менше.

-27 байт з видалення виводу, завдяки @KeyWeeUsr

+4 байти, фіксований регулярний вираз (такий же, як і всі інші)

Спробуйте в Інтернеті!


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

Гаразд, не був впевнений, який тип виводу (якщо такий є) потрібен. Питання насправді не сказало.
Напевно,

Ідея "truthy" пояснюється тут codegolf.meta.stackexchange.com/q/2190/16658 і загалом мається на увазі загально, якщо не зазначено інше
Сирени

Це не виводить нічого на TIO. Також ваш RegEx дозволяє підкреслити, що не повинно. І ти не перевіряєш довжину. Ми вимагаємо, щоб рішення тут були повністю функціональними, незавершені роботи не слід розміщувати. Я рекомендую видалити його, поки ви не зможете усунути проблеми. (У відповідній примітці, чому люди оприлюднюють рішення, які явно не працюють?)
Shaggy

@Shaggy Вихід здійснюється через вихідний код.
повністюлюдський

2

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

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

Редагування 2: Також я цілком можу просто позбутися цих}}}}. Дякуємо Телі пелікану за це і знайшли проблему з TIO

Редагування 3: замінено ~~~ на ап

!\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, ви можете змінити це на це.
Тіл пелікан

Дякую @Tealpelican Виправили це і вбили ще кілька байтів
Джо Кінг

Вам не вистачає чек для символів між "Z" та "a".
Емінья

@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?
Zacharý

Після коми є
зайвий пробіл

Ви можете видалити комою пробіл після коми.
Zacharý







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 Таблиці, 33 байти

Функція анонімного робочого аркуша, яка приймає вхід з діапазону A1і виводить в клітинку, що викликає

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

Де фіксатор?
Багаса Санджая

@BagasSanjaya - це одна з чудових речей про Google Таблиці, вона автоматично доповнює незакриті рядки та групи. Отже, коли це вставлено в клітинку, і ви або натискаєте клітинку, або натискаєте клавішу Enter, GS перетворює це =RegexMatch(A1,"^[^\W_]{0,76}VEVO")без будь-якого зворотного зв’язку з користувачем і виконує
Тейлор Скотт,

-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?функцію, хоча це частина стандартної бібліотеки.
Carcigenicate
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.