VEVO 사용자 계정 검사기


21

우리는 종종 유튜브에서 뮤직 비디오를 봅니다. 뮤직 비디오를 호스팅하는 많은 유튜브 채널은 "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
다른 제안 된 테스트 사례 : test123VeVo80 자 이상
Arnauld

6
최상의 답변을 수락하기 전에 더 오래 기다려야합니다. 질문은 한 시간 동안 만 이루어졌으며 사람들이 대답 할 수있는 더 많은 언어가 있습니다!
Luke Stevens

5
"대문자, 소문자 및 숫자 문자"는 A-Za-z0-9를 의미한다고 정의해야합니다. 예 다른 알파벳의 숫자 ( 예 : (9))
Jonathan Allan

답변:



6

Japt v2.0a0, 20 16 바이트

1유효 또는 0무효를 반환 합니다 . 동일한 바이트 수 [\l\d]대신에 작동 [^\W_]합니다.

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

사용해보십시오 | 모든 테스트 사례 확인

설명 : è입력에서 RegEx와 일치하는 횟수를 계산합니다. Japt에서 \wRegEx 클래스는 밑줄을 포함하지 않습니다.


좋은데 정규식없이 할 수있는 최선은;¥oB+mc)¯80 ©"VEVO"¥Ut4n
ETHproductions

@ETHproductions, 멋진 트릭 B+mc:) 그런데 Japt2에 대한 캐릭터 클래스가 있다면 [A-Za-z0-9]Retina를 이길 수 있습니다! 심지어 무시 가치가있을 수도 있습니다 \w\W.
Shaggy

P : 훗, 나는 일반적으로 JAPT에 대한 작업으로 돌아 가야 ... 난 사실 원래 그렇게 할 계획이라고 생각
ETHproductions

4

자바 스크립트 (ES6), 27 36 34 31 바이트

@Neil 덕분에 2 바이트, @Shaggy 덕분에 3 바이트 절약

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

테스트 사례


2
와도 \w일치 하지 _않습니까?
Neil

((?!_)\w)2 바이트를 절약 한다고 생각 합니다.
Neil

1
시겠습니까 [^\W_]A에 대한 작업을 3 바이트 절약 ?
Shaggy

@Shaggy Heck. 어떤 이유로, 나는 그러한 문자 클래스가 문자 세트 내에서 작동하지 않는다고 생각했습니다. 감사!
Arnauld

JS가 람다를 건너 뛸 수있는 방법이 없습니까? 좋아하는 /^[^\W_]{0,76}VEVO$/.test것?
완전히 인간적인

4

PHP , 51 바이트

<?=대신 @Ismael Miguel 덕분에 -10 바이트 <?php echo! 닫는 태그 제거

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

온라인으로 사용해보십시오!

다른 답변에 감사드립니다. 그래서 정규 표현식을 작성할 필요가 없었습니다!


1
대신 <?php echo할 수 있습니다 <?=preg_match("/^[^\W_]{0,76}VEVO$/",fgets(STDIN));.
Ismael Miguel

천만에요. 닫는 PHP 태그를 생략 할 수 있습니다. 문서 인용 : "파일이 순수 PHP 코드 인 경우 파일 끝에 PHP 닫기 태그를 생략하는 것이 좋습니다." ( php.net/manual/en/language.basic-syntax.phptags.php ). 이렇게하면 2 바이트가 더 절약됩니다. 또한 대신을 [^\W_]사용 \w하십시오 [a-zA-Z_].
Ismael Miguel

1
고마워, 지금 업데이트 할 몇 가지 답변이 있습니다!
NK1406

천만에요. 한 가지 조언 : 문서를 읽고 익숙해지면 많은 도움이 될 것입니다.
Ismael Miguel


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

때때로 "VI"가 저장 될 때 f ( "VO"도 참); 또는 아마도 결함
l4m2

3

Dyalog 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

dfn 가드 ⍣¯1를 확인 VEVO하고 필요로하는 대신을 사용할 수 있습니다 'VEVO'≡¯4↑⍵. {('VEVO'≡¯4↑⍵)∧∧/⍵∊⎕D,⎕A,(819⌶)⎕A}
조금만 움직여서

그래 @Cowsquack, 나는 잊어 수도 이 생각처럼이 도전을 할 수있는 다른 더 좋은 방법이 있습니다 ..하지만 (즉, ERIKS 답) 및 I : P
dzaima

3

Grime , 13 바이트

e`n{-76"VEVO"

온라인으로 사용해보십시오!

여기서 멋진 것은 없습니다. entire 입력을 패턴과 일치 시키 십시오 (최대 76 n자의 영숫자 문자와 문자열) VEVO. 1일치하고 일치 0하지 않는 인쇄 합니다 . 마지막 따옴표는 줄 끝에서 제거 될 수 있지만 구문 분석 오류가 발생하는 것으로 나타났습니다.


3

C # (. NET 코어) , 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")유니 코드 지원
dg3

2

> <> , 147 , 125 바이트

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

온라인으로 사용해보십시오!

> <> 147 바이트

온라인으로 사용해보십시오!

입력 문자열이 유효하고 유효하지 않은 입력에 대해서는 아무것도 인쇄하지 않습니다.

편집 1 : 모든 문자와 비교하지 않고 범위를 사용하도록 영숫자 검사를 변경했습니다. (22 바이트 절약)


지금 당장 골프를 칠 시간이 없지만 문자 코드와 비교하여 바이트를 잃을 수 있다고 확신합니다. 그것의 요지는 '0'보다 작고 'z'보다 큰 것을 거부 한 다음 '9'와 'A'사이뿐만 아니라 'Z'와 'a'사이의 것을 거부하는 것입니다.
cole

@cole :-나는 포스트 후에 어제 이것을 변경하기 위해 내 PC에 없었지만 당신은 옳습니다. 비교는 약간 잘라 버렸습니다. 코드를 스캔하면 여분의 바이트를 버릴 수 있습니다.
청록 펠리칸

2

배쉬, 53 26 30 바이트

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

VALID 결과의 종료 코드 0 및 INVALID 결과의 종료 코드 0

여전히 80 자 이하로 작업 중입니다.

@KeyWeeUsr 덕분에 출력 제거에서 -27 바이트

+4 바이트, 고정 정규식 (다른 모든 사람과 동일)

온라인으로 사용해보십시오!


당신은 echo 1진실을 위해, 또는 에코없이 갈 수 있습니다 . 당신은 아직도 당신이 실제로 확인하는 것이 종료 코드로 끝날으로 에코 아무것도 할 필요가 없습니다 &&||
KeyWeeUsr

좋아, 어떤 종류의 출력이 필요한지 확신하지 못했습니다. 그 질문은 실제로 말하지 않았다.
아마

'truthy'의 개념은 여기 codegolf.meta.stackexchange.com/q/2190/16658에 설명 되어 있으며 달리 명시되지 않는 한 일반적으로 암시 적으로 나타납니다
Sirens

이것은 TIO에서 아무것도 출력하지 않습니다. 또한 RegEx는 밑줄을 허용하지만 그렇게해서는 안됩니다. 그리고 당신은 길이를 확인하지 않습니다. 우리는 여기서 솔루션이 완벽하게 작동해야하며 진행중인 작품은 게시해서는 안됩니다. 문제를 해결할 수있을 때까지 삭제하는 것이 좋습니다. (관련 메모에서 사람들이 분명히 효과가없는 솔루션을지지하는 이유는 무엇입니까?)
Shaggy

@Shaggy 출력은 종료 코드를 통해 이루어집니다.
완전히 인간적인

2

> <> , 101 89 83 81 94 바이트

편집 : 영숫자가 아닌 영숫자가 아닌 문자 확인으로 전환되었습니다. 다시 전환하여 Z와 a를 확인하는 것을 잊었습니다. 감사합니다 @Emigna. 잃어버린 바이트를 추출

편집 2 : 또한}}}}을 완전히 제거 할 수 있습니다. 감사합니다 청록 펠리칸 그와에 대한 TIO의 문제를 찾는

편집 3 : ~ ~ ~를 p로 대체

!\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 LINK HERE 여기 TIO 에 혼란이 생기면이를 변경할 수 있습니다.
청록 펠리컨

@Tealpelican에게 감사합니다. 고쳐서 몇 바이트를 더 죽였습니다
Jo King

"Z"와 "a"사이의 문자 확인이 누락되었습니다.
Emigna

@Emigna 죄송합니다! 결정된!
Jo King

2

C ++, 129 (105) 102 바이트


Zacharý 덕분 에 문자 수 -2 바이트를 셀 수 있음을 보여준 다른 답변 덕분에

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

티오 링크


답변에서 TIO 링크는 어디에 있습니까? 코드를 테스트하고 싶습니다 ...
Bagas Sanjaya

이것이 C ++에 대한 지식이 부족한 경우 용서하십시오. 변수를 제거 r하고 호출 내에서 정규 표현식을 사용할 수 std::regex_match있습니까?
Zacharý

쉼표 뒤에 불필요한 공간이 있습니다
Zacharý

쉼표 뒤에 공백을 쉼표로 제거 할 수 있습니다.
Zacharý







1

V , 17 바이트

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

온라인으로 사용해보십시오!

16 진 덤프 :

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

펄 5 , 35 29 + 1 (-a) = 30 바이트

ETH 프로덕션 덕분에 -6 바이트

4 바이트가 추가되었습니다. 밑줄이 허용되지 않는 것을 보지 못했습니다.

이것이 나의 첫번째 골프이다. 그래서 나는 내가 그것을 올바르게 바랐기를 바라고있다.

유효하면 1을, 그렇지 않으면 0을 반환합니다.

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

온라인으로 사용해보십시오!


1
PPCG에 오신 것을 환영합니다! 불필요한 공백을 제거하여 25 (+1) 바이트까지 줄일 수 있습니다.print/^\w{1,76}VEVO$/?1:0
ETHproductions

+0match bool을 숫자 대신 숫자로 변환하여 ?1:02 바이트를 절약합니다. 로 호출 -ple인쇄 $_당신을 위해. 따라서 : perl -ple '$_=/^[^\W_]{0,76}VEVO$/+0'. 25 바이트 일치하지 않는 줄에 공백을 넣으려면 $_=/^[^\W_]{0,76}VEVO$/23 바이트입니다.
Phil H

0

Google 스프레드 시트, 33 바이트

범위에서 입력 A1을 받고 호출 셀로 출력 하는 익명의 워크 시트 함수

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

닫는 괄호는 어디에 있습니까?
Bagas Sanjaya

Google 스프레드 시트의 멋진 기능 중 하나 인 @BagasSanjaya는 닫히지 않은 문자열과 그룹을 자동 완성합니다. 셀에 붙여 넣을 때 셀을 클릭하거나 Enter 키를 누르면 GS가 이것을=RegexMatch(A1,"^[^\W_]{0,76}VEVO") 사용자에게 피드백없이 하여 실행합니다.
Taylor Scott

-1

클로저 , 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.