Trình kiểm tra tài khoản người dùng VEVO


21

Chúng ta thường thấy các video âm nhạc trên Youtube. Nhiều kênh Youtube lưu trữ video âm nhạc được "cung cấp bởi VEVO". Chúng có thể được xác định dễ dàng bằng cách nhúng VEVO vào hình thu nhỏ video của chúng và gắn VEVO vào tên kênh của chúng.

Bây giờ hãy viết một số mã để kiểm tra xem một chuỗi do người dùng cung cấp có phải là tài khoản người dùng VEVO hay không.

Yêu cầu đối với chuỗi tài khoản người dùng VEVO hợp lệ:

  • Chỉ được chứa chữ hoa, chữ thường và ký tự chữ số. (không có khoảng trắng hoặc dấu chấm câu)

  • Không được vượt quá 80 ký tự.

  • Phải có chuỗi con "VEVO" ở cuối chuỗi

Các trường hợp thử nghiệm:

Đầu vào hợp lệ:

AdeleVEVO
ConnieTalbotVEVO
SHMVEVO
justimberlakeVEVO
DJMartinJensenVEVO
test123VEVO

Đầu vào không hợp lệ:

syam kapuk
jypentertainment
Noche de Brujas
testVEVO123

Tất nhiên, vì đây là , tôi đang tìm mã ngắn nhất bằng bất kỳ ngôn ngữ lập trình nào.


4
Câu hỏi đầu tiên rất hay! +1
LiefdeWen

12
trường hợp thử nghiệm: VEVOūņīčōdēVEVO
dzaima

8
các trường hợp thử nghiệm được đề xuất khác: test123VeVovà một trường hợp có hơn 80 ký tự
Arnauld

6
Bạn nên chờ đợi lâu hơn trước khi chấp nhận một câu trả lời tốt nhất; câu hỏi chỉ mới được một giờ và có rất nhiều ngôn ngữ mà mọi người có thể trả lời!
Luke Stevens

5
"chữ hoa, chữ thường và ký tự chữ số" yêu cầu xác định (tôi sẽ giả sử (như tôi tin là tất cả đã làm rồi) rằng bạn có nghĩa là A-Za-z0-9; nhưng nó có thể có nghĩa là bất cứ điều gì có thể được viết hoa hoặc viết thường ví dụ chữ số trong các bảng chữ cái khác, ví dụ (9).
Jonathan Allan

Câu trả lời:



6

Japt v2.0a0, 20 16 byte

Trả về 1hợp lệ hoặc 0không hợp lệ. [\l\d]cũng sẽ làm việc thay [^\W_]cho số byte tương tự.

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

Hãy thử nó | Kiểm tra tất cả các trường hợp kiểm tra

Giải thích : èđếm số lượng trận đấu của RegEx trong đầu vào. Trong Japt, \wlớp RegEx không bao gồm dấu gạch dưới.


Đẹp một. Điều tốt nhất tôi có thể làm mà không cần regex là;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions 21/12/17

@ETHproductions, thủ thuật hay với B+mc:) Nhân tiện, nếu Japt2 có lớp nhân vật [A-Za-z0-9], chúng ta có thể đánh bại Retina tại đây! Thậm chí có thể có giá trị ghi đè \w& \W.
Xù xì

Heh, tôi nghĩ rằng tôi thực sự đã lên kế hoạch để làm điều đó ban đầu ... Tôi nên quay lại làm việc trên Japt nói chung: P
ETHproductions 21/12/17

4

JavaScript (ES6), 27 36 34 31 byte

Đã lưu 2 byte nhờ @Neil và 3 byte nhờ @Shaggy

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

Các trường hợp thử nghiệm


2
Không \wphù hợp với _s là tốt?
Neil

Tôi nghĩ ((?!_)\w)tiết kiệm 2 byte.
Neil

1
Sẽ [^\W_]làm việc để tiết kiệm 3 byte ?
Xù xì

@Shaggy Heck. Vì một số lý do, tôi đã nghĩ rằng các lớp nhân vật như vậy không hoạt động trong các bộ ký tự. Cảm ơn!
Arnauld

Không có cách nào để bỏ qua lambda? Thích /^[^\W_]{0,76}VEVO$/.testhay sao?
hoàn toàn là

4

PHP , 51 byte

-10 byte nhờ @Ismael Miguel đã sử dụng <?=thay vì <?php echo! và xóa thẻ đóng

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

Hãy thử trực tuyến!

Cảm ơn vì những câu trả lời khác vì vậy tôi đã không phải viết regex!


1
Thay vì <?php echo, bạn có thể làm <?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));.
Ismael Miguel

Không có gì. Bạn có thể bỏ qua thẻ PHP đóng. Trích dẫn tài liệu: "Nếu một tệp là mã PHP thuần túy, tốt nhất là bỏ qua thẻ đóng PHP ở cuối tệp." ( php.net/manual/en/lingu.basic-syntax.phptags.php ). Điều này sẽ giúp bạn tiết kiệm thêm 2 byte. Ngoài ra, thay vì [^\W_], chỉ sử dụng \w, đó là giống như [a-zA-Z_].
Ismael Miguel

1
Cũng cảm ơn, tôi có một vài câu trả lời để cập nhật ngay bây giờ!
NK1406

Không có gì. Một lời khuyên: đọc tài liệu và làm quen với nó sẽ giúp ích rất nhiều.
Ismael Miguel


3

C (gcc) , 83 byte

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

Hãy thử trực tuyến!


Tôi không thấy bất kỳ returntuyên bố nào, làm thế nào để trở lại c? Hành vi không xác định?
MD XF

@MDXF Đây thực sự là hành vi không xác định và lạm dụng cách gcc sử dụng cùng các thanh ghi cho các giá trị gán và trả về biến đổi (xem mẹo để chơi gôn trong C ). Đây không phải là di động và không nhất thiết phải hoạt động với các trình biên dịch khác (ví dụ: nó không hoạt động với
clang

Điều đó rất ấn tượng. làm thế nào bạn tìm nó ở ngoài kia?
MD XF

đôi khi f ("VO" cũng đúng, khi trước đó là "VI" được lưu trữ hoặc có thể lỗi
l4m2

3

APL Dyalog , 47 byte

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

Hãy thử trực tuyến!

Một giải pháp regex thuần túy là 32 byte , nhưng cũng nhàm chán hơn nhiều so với phương pháp này.

{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

Thay vì sử dụng ⍣¯1để kiểm tra VEVOvà cần người bảo vệ dfn, bạn có thể làm 'VEVO'≡¯4↑⍵. Di chuyển mọi thứ xung quanh một chút giúp tôi{('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
Kritixi Lithos

@Cowsquack yeah, tôi có thể đã quên mất .. Có nhiều cách khác tốt hơn để thực hiện thử thách này (ví dụ: câu trả lời của Eriks) và tôi thích ý tưởng này: p
dzaima

3

Vết bẩn , 13 byte

e`n{-76"VEVO"

Hãy thử trực tuyến!

Không có gì lạ mắt ở đây. Khớp eđầu vào ntire với mẫu: nhiều nhất là 76 nký tự chữ alpha , theo sau là chuỗi VEVO. In 1cho khớp và 0không khớp. Tôi nhớ rằng trích dẫn cuối cùng có thể được gỡ bỏ ở cuối dòng, nhưng rõ ràng nó chỉ gây ra lỗi phân tích cú pháp.


3

C # (.NET Core) , 87 + 18 = 105 byte

Hãy thử trực tuyến!

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

Điều này có thất bại không nếu đầu vào chứa bất kỳ ký tự không chữ và số nào?
Xù xì

@Shaggy Bạn nói đúng, sẽ sửa một chút sau.
LiefdeWen

Tôi đã kiểm tra với TIO và thấy rằng đầu vào "ConnieTalbotVEVO" (phải là đầu vào hợp lệ) đã bị khai báo sai là đầu vào không hợp lệ.
Bagas Sanjaya

@BagasSanjaya Đó là vì tôi đặt các tab sau nó trong trường hợp thử nghiệm, lấy các tab ra và nó sẽ giống như trường hợp thử nghiệm ở trên và sẽ hoạt động.
LiefdeWen

73 + 18: a=>a.All(x=>char.IsLetterOrDigit(x)&x<123)&a.Length<81&a.EndsWith("VEVO")chỉ các chữ cái ASCII hoặc 67 + 18: a=>a.All(x=>char.IsLetterOrDigit(x))&a.Length<81&a.EndsWith("VEVO")có hỗ trợ unicode
dg3 22/12/17

2

> <> , 147 125 byte

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

Hãy thử trực tuyến!

> <> , 147 byte

Hãy thử trực tuyến!

Điều này in 1 nếu chuỗi đầu vào hợp lệ và không có gì cho đầu vào không hợp lệ.

Chỉnh sửa 1: Thay đổi kiểm tra chữ và số để sử dụng phạm vi thay vì so sánh với mọi ký tự. (tiết kiệm 22 byte)


Tôi không có thời gian để chơi golf ngay bây giờ, nhưng tôi khá chắc chắn rằng bạn có thể mất byte bằng cách so sánh với mã ký tự. Ý chính của nó là từ chối những thứ nhỏ hơn '0' và lớn hơn 'z' và sau đó từ chối những thứ giữa '9' và 'A' cũng như giữa 'Z' và 'a'.
cole

@cole: - Tôi đã không ở PC của tôi để thay đổi điều này ngày hôm qua sau bài đăng nhưng bạn đã đúng, các so sánh đã bị cắt mất một chút. Tôi chắc chắn nếu bạn quét mã, bạn có thể bỏ thêm một số byte.
Teal pelican

2

Bash, 53 26 30 byte

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

Mã thoát 0 cho kết quả GIÁ TRỊ và 1 cho kết quả INVALID.

Vẫn hoạt động trên 80 ký tự hoặc ít hơn.

-27 byte từ việc loại bỏ đầu ra, nhờ @KeyWeeUsr

+4 byte, regex cố định (giống như mọi người khác)

Hãy thử trực tuyến!


Bạn có thể chỉ echo 1cho sự thật, hoặc chỉ đi mà không có bất kỳ tiếng vang. Không cần phải lặp lại bất cứ điều gì vì bạn vẫn kết thúc với một mã thoát mà bạn thực sự kiểm tra &&||
KeyWeeUsr

Được rồi, không chắc chắn loại đầu ra (nếu có) là bắt buộc. Câu hỏi không thực sự nói.
Có lẽ là

Ý tưởng về 'sự thật' được giải thích ở đây codegolf.meta.stackexchange.com/q/2190/16658 và thường được ngụ ý phổ biến trừ khi được quy định khác
Sirens

Điều này không tạo ra bất cứ điều gì trên TIO. Ngoài ra, RegEx của bạn cho phép gạch dưới, điều này không nên. Và bạn không kiểm tra độ dài. Chúng tôi yêu cầu các giải pháp phải có đầy đủ chức năng ở đây, các công việc đang tiến hành không nên được đăng. Tôi khuyên bạn nên xóa nó cho đến khi bạn có thể khắc phục vấn đề. (Trên một lưu ý liên quan, tại sao mọi người nâng cấp các giải pháp rõ ràng không hoạt động?)
Shaggy

@Shaggy Đầu ra là thông qua mã thoát.
hoàn toàn là

2

> <> , 101 89 83 81 94 byte

Chỉnh sửa: Chuyển sang kiểm tra các ký tự không phải chữ và số thay vì chữ và số. Chuyển đổi lại khiến tôi quên kiểm tra giữa Z và a. Cảm ơn @Emigna. Rip các byte bị mất mặc dù

Chỉnh sửa 2: Ngoài ra, tôi hoàn toàn có thể thoát khỏi những cái đó}}}}. Cảm ơn Teal pelican vì điều đó và tìm ra vấn đề với TIO

Chỉnh sửa 3: thay thế một ~~~ bằng ap

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

Tôi không biết tại sao điều này sẽ không hoạt động trên TIO, nhưng nó hoạt động tốt ở đây . Vấn đề là các lệnh {} trong TIO không hoạt động cho một danh sách trống. Dùng thử tại đây

Làm thế nào nó hoạt động

!\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

Để thống nhất, thay thế; trong dòng cuối cùng với một lệnh không hợp lệ làm cho mọi đầu ra đều có lỗi.


Tôi tin rằng lỗi TIO của bạn có thể là cách nó hoạt động với thứ tự phân chia ngăn xếp kết thúc. LIÊN KẾT TIO TẠI ĐÂY Có một mớ hỗn độn trong TIO bạn có thể thay đổi nó thành cái này.
Teal pelican

Cảm ơn @Tealpelican. Đã sửa lỗi đó và giết thêm một vài byte
Jo King

Bạn đang thiếu kiểm tra các ký tự giữa "Z" và "a".
Emigna

@Emigna Rất tiếc, cảm ơn! Đã sửa!
Jo King

2

C ++ 129 105 102 byte

Nhờ các câu trả lời khác cho tôi thấy rằng tôi có thể đếm số lượng ký tự
-2 byte nhờ vào Zacharý

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

LIÊN KẾT TIO


Liên kết TIO ở đâu trong câu trả lời của bạn? Tôi muốn kiểm tra mã của bạn ...
Bagas Sanjaya

Hãy tha thứ cho tôi nếu đây là sự thiếu kiến ​​thức về C ++. Bạn có thể di chuyển loại bỏ biến rvà chỉ có regex bên trong lệnh gọi tới std::regex_matchkhông?
Zacharý

Có một không gian không cần thiết sau dấu phẩy
Zacharý

Bạn có thể xóa dấu phẩy khoảng trắng sau dấu phẩy.
Zacharý



1

Java (OpenJDK 8) , 37 36 byte

Câu trả lời khá đơn giản bằng cách sử dụng một số regex đáng yêu.
Có thể là câu trả lời Java ngắn nhất tôi từng làm.
-1 byte nhờ Neil trả lời Javascript

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

Hãy thử trực tuyến!





1

V , 17 byte

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

Hãy thử trực tuyến!

Hexdump:

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

Regexes nén cho chiến thắng!

ø                   " 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 byte

-6 byte nhờ vào ETHproductions

Đã thêm 4 byte. Không thấy rằng gạch dưới không được phép.

Đây là sân golf đầu tiên của tôi, vì vậy đây là hy vọng tôi đã làm đúng.

Trả về 1 nếu hợp lệ, 0 nếu không.

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

Hãy thử trực tuyến!


1
Chào mừng đến với PPCG! Bạn có thể xóa khoảng trắng bên ngoài để giảm xuống 25 (+1) byte:print/^\w{1,76}VEVO$/?1:0
ETHproductions 21/12/17

+0chuyển đổi bool khớp thành số, thay vì ?1:0, tiết kiệm 2 byte. Gọi với -plebản in $_cho bạn. Vì vậy : perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'. 25 byte. Nếu bạn hài lòng khi nhận được khoảng trống trên các dòng không khớp, $_=/^[^\W_]{0,76}VEVO$/là 23 byte.
Phil H

0

Google Sheets, 33 byte

Hàm bảng tính ẩn danh nhận đầu vào từ phạm vi A1 và đầu ra cho ô gọi

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

Khung đóng cửa ở đâu?
Bagas Sanjaya

@BagasSanjaya đó là một trong những điều tuyệt vời về Google Sheets, nó tự động hoàn thành các chuỗi và nhóm không được tiết lộ. Vì vậy, khi điều này được dán vào một ô và bạn bấm vào ô đó hoặc nhấn enter, GS sẽ chuyển đổi nó thành =RegexMatch(A1,"^[^\W_]{0,76}VEVO")không có bất kỳ phản hồi nào cho người dùng và thực thi
Taylor Scott

-1

Clojure , 146 byte

(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"))))

Hãy thử trực tuyến!

Điều này sẽ ngắn hơn nhiều khi sử dụng regex, nhưng tôi nghĩ rằng làm nó bằng tay sẽ thú vị hơn.

(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")))

Bất kỳ liên kết TIO để thử nghiệm?
Bagas Sanjaya

@BagasSanjaya Tôi có thể thêm một chút. Có vẻ như việc thêm các liên kết TIO là tiêu chuẩn. Chúng là tùy chọn lần trước tôi sử dụng trang này thường xuyên, nhưng bây giờ mọi người đều thêm chúng.
Carcigenicate

@BagasSanjaya Tôi đã thêm một liên kết. Thật không may TIO dường như bị hỏng. Nó không thể tìm thấyends-with? chức năng, mặc dù đó là một phần của thư viện chuẩn.
Carcigenicate
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.